c # Консоль обслуживания Windows. Writeln - PullRequest
2 голосов
/ 14 декабря 2010

Я написал, установил и успешно запустил Службу Windows в c #, которая ничего не делает :) Сначала я просто хочу, чтобы в консоли выполнялось эхо, запросы к базе данных, сделанные службой и т. Д. Я использовал OnStart в своей службе, но из cmd подскажите, когда я запускаю по сети "My Service", где отображаются эти сообщения?

Я открыт для лучших способов. Я новичок в этом и чувствую свой путь через это шаг за шагом, отражая обратно в консоль мой прогресс. Должен ли я вместо этого отражаться в журнале событий? Как мне это сделать? (Я знаю, я знаю, Google это)

 protected override void OnStart(string[] args)
    {
        base.OnStart(args);
        Console.WriteLine("Sham-Wow!");
    }

Ответы [ 5 ]

7 голосов
/ 14 декабря 2010

Вы не можете написать консоль из службы Windows.

Я рекомендую вам использовать любую утилиту регистрации, такую ​​как log4net .

Второй вариант - запись в Журнал событий (System.Diagnostics.EventLog)

3 голосов
/ 14 декабря 2010

Если вы хотите запустить ваше приложение как консольное приложение (чтобы вы могли видеть вывод консоли) или как службу, вы можете добиться этого с помощью следующего:

  • Убедитесь, что ваше приложение скомпилировано как консольное приложение.
  • Измените основной метод приложения, чтобы можно было переходить для выполнения службы или консоли.
  • Запустите приложение следующим образом, чтобы получить консоль "myservice.exe /console".

Прошли годы с тех пор, как я это сделал, поэтому, возможно, потребуется немного доработать, но что-то вроде следующего:

static void Main(string[]] args) 
{ 
    if (args.Length == 0)
    {
          //Service entry
          System.ServiceProcess.ServiceBase[] services; 
          services = new System.ServiceProcess.ServiceBase[] { new WinService1() }; 
          System.ServiceProcess.ServiceBase.Run(services);
    }
    else
    {
          //Console entry
          OnStart(args);
    } 
}

protected override void OnStart(string[] args)
{
    base.OnStart(args);
    Console.WriteLine("Sham-Wow!");
}

Это хорошо для некоторых ранних экспериментов, но я бы порекомендовал Log4Net, как только вы разберетесь в этом.

3 голосов
/ 14 декабря 2010

Попробуйте System.Diagnostics.Trace.WriteLine , и вы увидите ваши сообщения в окне вывода Visual Studio или с помощью утилиты dbgview.

1 голос
/ 14 декабря 2010

Наиболее распространенный / общепринятый способ информирования о состоянии вашей службы - запись в журнал событий Windows.

Для упрощения отладки я бы порекомендовал поместить весь ваш бизнес-код в отдельный класс от компонента службы.Затем вы можете использовать этот класс из вашей службы или из консольного приложения.При создании службы вы будете использовать консольное приложение для размещения вашего компонента, чтобы вы могли легко войти в код.

0 голосов
/ 29 марта 2019

Очень старый вопрос, но очень актуальный. Вот как я реализовал механизм ведения журнала, который я мог проверять во время работы службы Windows.

  • Создать файл журнала. Мой любимый это Log4net, как уже упоминалось ранее.
  • Откройте PowerShell и выполните эту команду Get-Content "path/to/file.log" -Wait

Вы сможете отслеживать файл по мере его изменения. Это похоже на команду tail в linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...