Я работаю как услугаC#

Место общения программистов C#
Ответить
Anonymous
 Я работаю как услуга

Сообщение Anonymous »

Сейчас я пишу небольшой загрузочный код для службы, которую можно запустить в консоли. По сути, все сводится к вызову метода OnStart() вместо использования ServiceBase для запуска и остановки службы (поскольку приложение не запускается, если оно не установлено как служба, и делает отладку кошмаром).

Сейчас я использую 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();
}
}
РЕДАКТИРОВАТЬ: На StackOverflow был еще один вопрос, где у парня были проблемы с Environment.CurrentDirectory, равным «C:\Windows\System32», похоже, это может быть ответом. Сегодня протестирую.

Подробнее здесь: https://stackoverflow.com/questions/200 ... -a-service
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»