バッチ ファイルを呼び出すサービスがあります。バッチ ファイルの実行には 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 のコードを使用すると、出力を取得できます。バッチ ファイルの 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\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からユーザーに変更しようとしましたが、管理者のユーザーとパスワードを設定しましたが、まだ何もありません。