Сейчас я использую Debugger.IsAttached, чтобы определить, следует ли мне использовать ServiceBase.Run или [service].OnStart, но я знаю, что это не лучшая идея, потому что иногда конец пользователи хотят запустите службу в консоли (чтобы увидеть выходные данные и т. д. в реальном времени).
Есть идеи о том, как я могу определить, запустил ли контроллер службы Windows «меня» или пользователь начал «я» в консоли? Очевидно, Environment.IsUserInteractive не является ответом. Я думал об использовании аргументов командной строки, но это кажется «грязным».
Я всегда мог увидеть оператор try-catch вокруг ServiceBase.Run, но это кажется грязным. Изменить: Try catch не работает.
У меня есть решение: разместите его здесь для всех заинтересованных стекеров:
Код: Выделить всё
public void Run()
{
if (Debugger.IsAttached || Environment.GetCommandLineArgs().Contains("-console"))
{
RunAllServices();
}
else
{
try
{
string temp = Console.Title;
ServiceBase.Run((ServiceBase[])ComponentsToRun);
}
catch
{
RunAllServices();
}
}
} // void Run
private void RunAllServices()
{
foreach (ConsoleService component in ComponentsToRun)
{
component.Start();
}
WaitForCTRLC();
foreach (ConsoleService component in ComponentsToRun)
{
component.Stop();
}
}
Подробнее здесь: https://stackoverflow.com/questions/200 ... -a-service
Мобильная версия