Как вы читаете консольный вывод из службы Windows? - PullRequest
4 голосов
/ 14 декабря 2011

У меня есть консольное приложение ThirdPartyApplications.exe, которое я должен запустить из службы Windows. Консольное приложение дает мне ответы: OK, NOT OK и ERROR.

Мне нужно захватить эти ответы в моей службе Windows.

Я создал функцию

 using (var p = new System.Diagnostics.Process())
        {
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.FileName = @"C:\ThirdPartyApplications.exe";
            p.StartInfo.Arguments = "3";
            p.Start();
            string o = p.StandardOutput.ReadToEnd();

            p.WaitForExit();
        }

Как я могу захватить этот вывод?

EDIT

 using (var p = new System.Diagnostics.Process())
        {
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.FileName = @"C:\ThirdPartyBatch.bat";
            p.StartInfo.Arguments = "file.zip -user.properties";
            p.Start();
            string o = p.StandardOutput.ReadToEnd();

            p.WaitForExit();
        }

Пакетный файл

@echo off
call run.bat %* 1>log\out.txt 2>log\err.txt
@echo code %ERRORLEVEL%
exit /B %ERRORLEVEL%

здесь, в моей переменной o, я не получаю сообщение "код 10"

если у меня есть

@ECHO off
ECHO Hello
PAUSE

Здесь я получаю сообщение «Hello», но если я изменяю командный файл

@ECHO off
call run.bat %* 1>log\out.txt 2>log\err.txt
ECHO Hello
PAUSE

Я не получаю сообщение "Hello"

Любая помощь?

1 Ответ

2 голосов
/ 14 декабря 2011

Как я могу захватить этот вывод?

Только когда не работает как служба.

Исполняемый файл в Windows должен вызывать определенные API (напрямую как Win32приложение или косвенно в рамках, таких как .NET), если он не вызывает их (например, логика, основанная на ключе командной строки 1 ), то это обычный исполняемый файл.

Когдапри запуске в качестве службы исполняемый файл запускается диспетчером управления службами (SCM), и нет доступа к стандартному выводу, ошибке или вводу.


1 Это может быть полезнопри разработке и отладке сервисов: «интерактивный» режим, позволяющий легко запускаться из командной строки или в отладчике.

...