尝试使用 PsExec 远程运行 .NET 命令行工具时,我遇到了一个奇怪的问题。
从命令行运行 PsExec 时,它可以正常运行并完成。
从控制台应用程序运行它时(创建一个进程,运行 PsExec.exe 并为其提供必要的参数)——它运行正常。
从我们用于运行不同任务的内部自定义工具运行它时,它要么超时,要么无法成功完成。
这是我正在使用的代码:
Process p = new Process();
p.StartInfo.FileName = @"C:\PsExec.exe";
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
string arg = "-snapshot -display C:\*.msi -s";
p.StartInfo.Arguments = @"\\10.161.203.106 -u user -p pwd -cf C:\FVT.exe " + arg;
Logger.Info(this, "Starting process");
p.Start();
var ended = p.WaitForExit(60 * 1000);
if (!ended)
{
throw new Exception("Process timed out.");
}
Logger.Info(this, "Process ended");
using (StreamReader sr = p.StandardOutput)
{
string buffer = sr.ReadToEnd();
Logger.Info(this, buffer);
}
此代码在 cmd 行或独立应用程序中运行良好!
我不知道这里还有什么问题。
我们的内部工具会生成一个新线程并在其中运行此代码。
更新:
命令行窗口中的命令行 + args - 工作。相同的 cmd + args,作为带有 RedirectOutput 的进程运行 - 暂停并在超时时返回。
这可能是 .NET 中的错误吗?(这发生在其他程序、批处理文件等)。