我正在尝试从网页在远程主机上运行 .bat 文件。
执行批处理后,PSEXECSVC(在主机上)将挂起且不会关闭,导致服务器无限期等待。
当在控制台应用程序中运行完全相同的代码(见底部)时,服务关闭并且一切正常......
奇怪的部分是当批处理文件包含单行回显时:
@echo off
echo ------ Start -----
exit
PsExecSvc 将关闭,页面上将显示 “------ Start -----”
。 (这就是我想要的..)
另一方面,
@echo off
echo ------ Start -----
echo echo2
exit
PSEXECSVC 将在执行结束时挂起...
手动杀掉 PSEXECSVC 时,仅显示 "-------- Start -----"
和 StdErr
打印:
PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com
The handle is invalid.
Connecting to novi2...
Starting PsExec service on novi2...
Connecting with PsExec service on novi2...
Starting C:/dbInfo.bat on novi2...
Error communicating with PsExec service on novi2:
无论批处理文件中运行什么,只有 StdOut 的第一行被重定向,并且 psexecsvc 挂起(但在执行整个批处理之后:O)。
如果正在运行:
信息.bat:
@echo off
cscript /nologo test.vbs
exit
测试.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 中的应用程序池使用与 psexec 相同的管理员帐户。
最佳答案
问题可能是远程主机 (novi2) 上的 PSExecSvc 没有自行清理,现在需要将其删除才能成功运行。我现在在针对远程主机启动 PSExec 的每个脚本的末尾添加以下内容:
sc \\novi2 delete PSExecSvc
此外,如果您在远程主机上实例化 PSExec,而不是针对远程主机,那么您需要确保添加用于接受其 EULA 的开关,如下所示:
psexec \\HOST1 /accepteula -u userid -p password COMMAND
希望有帮助, 莉兹
关于c# - 从 IIS 运行 PsExec : PsExecSVC hanging on remote host,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4904725/