Webページからリモートホストで.batファイルを実行しようとしています。
PSEXECSVC(ホスト上)は、バッチの実行後にハングして閉じないため、サーバーは無期限に待機します。
コンソールアプリケーションでまったく同じコード(下部を参照)を実行すると、サービスが終了し、すべてが正常になります...
奇妙な部分は、バッチファイルが1つのライナーエコーで構成されている場合です。
@echo off
echo ------ Start -----
exit
PsExecSvcが閉じ "------ Start -----"
、ページに表示されます。(これが私が欲しいものです..)
一方で、
@echo off
echo ------ Start -----
echo echo2
exit
PSEXECSVCは実行の最後にハングします...
PSEXECSVCを手動で強制終了すると、"------ Start -----"
表示とStdErrの出力のみが表示されます。
PsExecv1.98-プロセスをリモートで実行する
Copyright(C)2001-2010マーク・ルシノビッチ
Sysinternals-www.sysinternals.com
ハンドルが無効です。
novi2に接続しています...
novi2でPsExecサービスを開始しています...
novi2でPsExecサービスに接続しています...
novi2でC:/dbInfo.batを開始しています...
novi2でのPsExecサービスとの通信エラー:
バッチファイルで何が実行されていても、StdOutの最初の行のみがリダイレクトされ、psexecsvcがハングします(ただし、バッチ全体が実行された後:O)。
実行中の場合:
info.bat:
@echo off
cscript /nologo test.vbs
exit
test.vbs:
Set objOut = Wscript.StdOut
objOut.WriteLine "----------------------------------"
objOut.Writeline "Win32_OperatingSystem instance"
objOut.Writeline "----------------------------------"
objOut.close
Wscript.quit 666
ConsoleApplicationはすべてを出力し、666を返します
IISはStdOutで「----------------------------------」のみを取得し、psexecsvcはハングします...
これは、C#でpsexecを実行するために使用されるコードです...
Process proc = new Process();
ProcessStartInfo procInfo = new ProcessStartInfo(@"C:/PsExec.exe", @"\\novi2 -u Domain\usernameadmin -p Password C:/info.bat");
procInfo.UseShellExecute = false;
procInfo.RedirectStandardOutput = true;
procInfo.RedirectStandardError = true;
proc.StartInfo = procInfo;
proc.Start();
String output = proc.StandardOutput.ReadToEnd();
String err = proc.StandardError.ReadToEnd();
Trace.WriteLine("Out >> " + output);
Trace.WriteLine("Err >> " + err);
proc.Close();
サーバーでIIS7、ASP MVC3、.NET4.0(VS2010のサンプルプロジェクト)を使用し、ホストでWinXPSP3を使用しています。問題を回避するために、IISのApplicationPoolはpsexecと同じ管理者アカウントを使用しています。