У меня есть служба, которая иногда вызывает пакетный файл. Пакетный файл занимает 5-10 секунд для выполнения:
System.Diagnostics.Process proc = new System.Diagnostics.Process(); // Declare New Process
proc.StartInfo.FileName = fileName;
proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();
Файл существует, и код работает, когда я запускаю тот же самый код в консоли. Однако, когда он запускается внутри службы, он зависает в WaitForExit()
. Мне нужно убить командный файл из процесса, чтобы продолжить. (Я уверен, что файл существует, поскольку я вижу его в списке процессов.)
Как я могу исправить эту зависание?
Обновление # 1:
Код Kevin позволяет мне получать выходные данные. Один из моих пакетных файлов все еще висит.
"C:\EnterpriseDB\Postgres\8.3\bin\pg_dump.exe" -i -h localhost -p 5432 -U postgres -F p -a -D -v -f "c:\backupcasecocher\backupdateevent2008.sql" -t "\" public \ ".\" dateevent \ "" "DbTest"
Другой командный файл:
"C:\EnterpriseDB\Postgres\8.3\bin\vacuumdb.exe" -U postgres -d DbTest
Я проверил путь, и путь postgresql
в порядке. Каталог вывода существует и по-прежнему работает вне службы. Любые идеи?
Обновление # 2:
Вместо пути командного файла я написал "C:\EnterpriseDB\Postgres\8.3\bin\pg_dump.exe" для proc.StartInfo.FileName
и добавил все параметры в proc.StartInfo.Arguments
. Результаты не изменяются, но я вижу pg_dump.exe
в окне процесса. Опять же это происходит только внутри службы.
Обновление № 3:
Я запустил службу с пользователем в группе администратора, но безрезультатно. Я восстановил null
для имени пользователя и пароля службы
Обновление # 4:
Я создал простую службу для записи трассировки в журнале событий и выполнения пакетного файла, содержащего в нем "dir". Теперь он будет зависать на proc.Start();
- я попытался изменить учетную запись с LocalSystem на Пользователь, и я установил пароль администратора и пароль, но ничего.