【问题标题】:Running PsExec From IIS: PsExecSVC hanging on remote host从 IIS 运行 PsExec:PsExecSVC 挂在远程主机上
【发布时间】:2011-02-05 02:19:59
【问题描述】:

我正在尝试通过网页在远程主机上运行 .bat 文件。

PSEXECSVC(在主机上)将在批处理执行后挂起并且不会关闭,从而导致服务器无限期等待。
在控制台应用程序中运行完全相同的代码(见底部)时,服务关闭并且一切正常......

奇怪的部分是当批处理文件由单行回显组成时:

@echo off
echo ------ Start -----
exit

PsExecSvc 将关闭,"------ Start -----" 将显示在页面上。 (这就是我想要的..)

另一方面,

@echo off
echo ------ Start -----
echo echo2

exit

PSEXECSVC 将在执行结束时挂起...

手动查杀PSEXECSVC时,只显示"------ Start -----"和StdErr 打印:

PsExec v1.98 - 执行进程 远程

版权 (C) 2001-2010 标记 鲁西诺维奇

Sysinternals - www.sysinternals.com

句柄无效。

正在连接到 novi2...

正在 Novi2 上启动 PsExec 服务...

与 PsExec 服务连接 nov2...

在 novi2 上启动 C:/dbInfo.bat...

与 PsExec 通信时出错 novi2 上的服务:

无论在批处理文件中运行什么,只有 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();

我在服务器上使用 IIS 7、ASP MVC3 和 .NET4.0(来自 VS2010 的示例项目)和用于主机的 WinXP SP3。 为避免出现问题,IIS 中的 ApplicationPool 使用与 psexec 相同的管理员帐户。

【问题讨论】:

标签: c# iis-7 batch-file psexec


【解决方案1】:

问题可能是您的远程主机 (novi2) 上的 PSExecSvc 没有自行清理,现在需要删除它才能成功运行。我现在在针对远程主机启动 PSExec 的每个脚本的末尾添加以下内容:

sc \\novi2 delete PSExecSvc

此外,如果您在 上实例化 PSExec,而不是针对远程主机,那么您需要确保添加开关以接受其 EULA,如下所示:

psexec \\HOST1 /accepteula -u userid -p password COMMAND

希望对您有所帮助, 丽兹

【讨论】:

    猜你喜欢
    • 2019-12-31
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多