El servicio se cuelga en WaitForExit después de llamar al archivo por lotes

Tengo un servicio que a veces llama un archivo por lotes. El archivo por lotes tarda 5-10 segundos en ejecutarse:

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();

El archivo existe y el código funciona cuando ejecuto el mismo código en la consola. Sin embargo, cuando se ejecuta dentro del servicio, cuelga enWaitForExit(). Tengo que eliminar el archivo por lotes del Proceso para continuar. (Estoy seguro de que el archivo existe, ya que puedo verlo en la lista de procesos).

¿Cómo puedo solucionar este problema?

Actualización n. ° 1:

El código de Kevin me permite obtener resultados. Uno de mis archivos por lotes todavía está colgado.

"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"

El otro archivo por lotes es:

"C: \ EnterpriseDB \ Postgres \ 8.3 \ bin \ vacuumdb.exe" -U postgres -d DbTest

He comprobado el camino y elpostgresql El camino está bien. El directorio de salida existe y aún funciona fuera del servicio. ¿Algunas ideas?

Actualización n. ° 2:

En lugar de la ruta del archivo por lotes, escribí "C: \ EnterpriseDB \ Postgres \ 8.3 \ bin \ pg_dump.exe" para elproc.StartInfo.FileName y agregó todos los parámetros aproc.StartInfo.Arguments. Los resultados no han cambiado, pero veo elpg_dump.exe en la ventana del proceso. Nuevamente, esto solo ocurre dentro del servicio.

Actualización n. ° 3:

Ejecuté el servicio con un usuario en el grupo de administradores, pero fue en vano. Yo restaurenull para el nombre de usuario y contraseña del servicio

Actualización n. ° 4:

Creé un servicio simple para escribir un seguimiento en el registro de eventos y ejecutar un archivo por lotes que contiene "dir". Ahora colgará enproc.Start(); - Intenté cambiar la cuenta de LocalSystem aUsuario y configuré el usuario administrador y la contraseña, todavía nada.

Respuestas a la pregunta(8)

Su respuesta a la pregunta