#if DEBUG
MainService service1 = new MainService();
service1.onDebug();
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
ConfigurationSync.logDebugMessage(logMessageType.message, "Starting main service thread");
#else
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MainService()
};
ServiceBase.Run(ServicesToRun);
ConfigurationSync.logDebugMessage(logMessageType.message, "Starting main service thread");
#endif
Я создал свою первую службу Windows, и мне интересно, как правильно запустить службу в файле Program.cs.
Приведенный выше код - это то, что было предложено мнеонлайн-приём, #if debug
, запущенный во время тестирования в Visual Studio, и блок else
, запущенный при сборке в режиме выпуска и установленный на сервере.Проблема в том, что он не запускается на сервере после установки, если я не использую код в блоке кода #if debug
.Если я запускаю код, как указано выше, он говорит, что служба запущена, но, похоже, ничего не происходит, а если я только запускаю то, что находится в блоке debug
, служба запускается, но я получаю ошибку на сервере "Service failed to start in a timely manner"
Буду признателен за любую помощь
Обновление: в моем mainservice у меня есть функция, которая запускает все функции службы, эта функция startSoftwareUpdates();
Это те функции, которые у меня естьв MainService
:
public MainService()
{
startSoftwareUpdates();
public void onDebug()
{
OnStart(null);
}
protected override void OnStart(string[] args)
{
startSoftwareUpdates();
}
Обновление 3:
Итак, я переставил MainService
следующим образом:
public MainService()
{
InitializeComponent();
}
public void onDebug()
{
OnStart(null);
}
protected override void OnStart(string[] args)
{
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
startSoftwareUpdates();
}).Start();
}
С какими проблемами я могу столкнутьсяс таким подходом?Я бы тоже хотел, чтобы поток работал бесконечно ...