В настоящее время я пишу небольшой код начальной загрузки для службы, которую можно запустить в консоли. Это, по сути, сводится к вызову метода OnStart() вместо использования ServiceBase для запуска и остановки службы (потому что она не запускает приложение, если оно не установлено как служба и делает отладку кошмаром).Я работаю как услуга
В настоящее время я использую Debugger.IsAttached, чтобы определить, следует ли использовать ServiceBase.Run или [service] .OnStart, но я знаю, что это не лучшая идея, потому что некоторые конечные пользователи хотят запустить службу в консоль (чтобы увидеть выход и т. д. в реальном времени).
Любые идеи о том, как я могу определить, запущен ли сервисный контроллер Windows «я», или пользователь начал «меня» в консоли? Очевидно, Environment.IsUserInteractive не является ответом. Я думал об использовании командной строки, но это кажется «грязным».
Я всегда мог видеть заявление о попытке захвата вокруг ServiceBase.Run, но это кажется грязным. Изменить: попытка catch не работает.
У меня есть решение: положить его здесь для всех других заинтересованных штабелеров:
public void Run()
{
if (Debugger.IsAttached || Environment.GetCommandLineArgs().Contains<string>("-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();
}
}
EDIT: Был еще один вопрос, на StackOverflow, где парень имел проблемы с Environment.CurrentDirectory быть «C: \ Windows \ System32 "похоже, что это может быть ответ. Я буду проверять сегодня.
Благодаря ДОРАМ добавив ваше решение, должно быть полезной справочной. – Ash 2008-10-16 09:57:22
Не то, что IsUserInteractive будет * not * возвращать false для консольных приложений, как указано в ссылке, которую вы указали выше, по крайней мере, не в общем. Я использую его для этой цели, и у меня никогда не было никаких проблем. – 2010-03-06 09:22:55
[Вот тот же вопрос для C++] (https://stackoverflow.com/questions/1974828/) – 2018-02-20 04:06:30