У меня есть служба, которая иногда вызывает командный файл. Пакетный файл занимает 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
в порядке. Выходной каталог существует и все еще работает за пределами службы. Есть идеи?
Обновление № 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 на Пользователь , и я установил пользователя и пароль администратора, но ничего не вышло.