我試圖在網頁上運行遠程主機上的.bat文件。從IIS運行PsExec:掛在遠程主機上的PsExecSVC
執行批處理後,PSEXECSVC(主機上)將掛起並且不會關閉,導致服務器無限期地等待。
當運行完全相同的代碼(參見下圖)在控制檯應用程序的服務關閉,一切都很好...
怪異的一部分是當批處理文件包含一個襯墊回聲:
@echo off
echo ------ Start -----
exit
PsExecSvc將關閉,"------ Start -----"
顯示在頁面上。 (這是我想要的..)
在另一方面,
@echo off
echo ------ Start -----
echo echo2
exit
PSEXECSVC將在執行結束掛...
當手動查殺PSEXECSVC,只有"------ Start -----"
節目和標準錯誤 打印:
PSEXEC v1.98 - 執行過程 遠程
版權所有(C)2001-2010馬克 Russinovich編寫
的Sysinternals - www.sysinternals.com
的句柄無效。
連接到novi2 ...
開始對novi2 PSEXEC服務...
上 novi2與PSEXEC服務連接...
開始C:/dbInfo.bat上novi2。 ..
錯誤與PSEXEC 服務通信上novi2:
不管是在批處理文件運行時,只有標準輸出的第一行被重定向和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();
我使用IIS 7,ASP MVC3和服務器上.NET4.0(從VS2010樣本項目)和WinXP SP3主機。 爲避免問題,IIS中的ApplicationPool使用與psexec相同的管理員帳戶。
任何有關它的解決方案嗎?這個怎麼樣:http://www.autoitscript.com/forum/topic/42368-psexecsvcexe-problem/ – Kiquenet