【发布时间】: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