Служба TopShelf работает только как локальная система

#c# #service #topshelf

Вопрос:

Я очень новичок в разработке на C# и никогда раньше не использовал TopShelf для создания сервиса. Я думаю, что у меня правильно настроена верхняя полка для запуска таймера приложения, но когда я скомпилирую приложение и перейду к его установке, служба не запустится, выдав ошибку 1053. Служба, похоже, запускается только как учетная запись локальной системы с взаимодействием с рабочим столом. Я не могу не думать, что я сделал что-то не так при настройке TopShelf для запуска, так как процесс запуска запустит таймер. Я думаю, что из-за моего незнания C# я не сообщил менеджеру службы, что мое приложение запущено. С точки зрения моего опыта в C#, я даже не знаю достаточно, чтобы быть опасным, использую VB в течение многих лет, и мне пришлось выучить C# сейчас, чтобы продолжать работать.

 using HPLC_Transport; using System; using Topshelf;  namespace HPLC_Transport_Ser {  internal class Program  {  [Obsolete]  private static void Main(string[] args)  {  try  {  var exitCode = HostFactory.Run(x =gt;  {  Topshelf.HostConfigurators.HostConfigurator hostConfigurator = x.Servicelt;HPLC_Transport_Service.Maingt;(s =gt;  {  s.ConstructUsing(name =gt; new HPLC_Transport_Service.Main());  s.WhenStarted(HPLC_Transport =gt; HPLC_Transport.Start());  s.WhenStopped(HPLC_Transport =gt; HPLC_Transport.Stop());  });   x.StartAutomatically();  x.SetServiceName("HPLCTransportService");  x.SetDisplayName("HPLC Transport Service");  x.SetDescription("The application evaluates the data save folder from the OpenLab software for new reports. "    "Evaluate the report data and determine if that data exists in the database for HPLC test data. "    "If the data does not exist then writes it to the database");  });  // Snag the exit code value to return for the reason why the service stops  int exitCodeValue = (int)Convert.ChangeType(exitCode, exitCode.GetTypeCode());  Environment.ExitCode = exitCodeValue;  }  catch (Exception ex)  {  ErrorLogger.WriteToErrorLog("Errors", ex.Message, ex.StackTrace);  }  }  } }   public void Start()  {  //DoAutoClick();  // Setups Timer and starts it to fire all other events  int processTime = System.Convert.ToInt32(ConfigurationManager.AppSettings["ProcessTimer"]);   CycleTimr = new System.Timers.Timer((1000 * 60) * processTime) { AutoReset = true };  CycleTimr.Elapsed  = CycleTimr_Elapsed;  CycleTimr.Start();  }   public void Stop()  {  CycleTimr.Stop();  // We might want clean up when it stops  }