Служба зависает в WaitForExit после вызова командного файла
У меня есть служба, которая иногда вызывает командный файл. Пакетный файл занимает 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:Код Кевина позволяет мне получить вывод. Один из моих командных файлов все еще висит.
"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 \uumdb.exe" -U postgres -d DbTest
Я проверил путь иpostgresql
путь в порядке. Выходной каталог существует и все еще работает за пределами службы. Есть идеи?
Вместо пути к пакетному файлу я написал «C: \ EnterpriseDB \ Postgres \ 8.3 \ bin \ pg_dump.exe» дляproc.StartInfo.FileName
и добавил все параметры вproc.StartInfo.Arguments
, Результаты не изменились, но я вижуpg_dump.exe
в окне процесса. Опять же, это происходит только внутри сервиса.
Я запустил службу с пользователем в группе администраторов, но безрезультатно. Я восстановилnull
для имени пользователя и пароля службы
Я создал простой сервис для записи трассировки в журнал событий и запуска командного файла, в котором содержится «dir». Теперь он будет висеть наproc.Start();
- Я попытался изменить учетную запись с LocalSystem напользователь и я установил пользователя admnistrator и пароль, все еще ничего.