C# 和 psexec 进程输出重定向问题

标签 c# system.diagnostics psexec netstat

我正在尝试创建一个在集中式设备上运行的小程序。该程序将运行

"psexec \server(s) netstat -na | findstr "LISTENING""

从远程节点收集 netstat 数据(应将输出重定向到字符串),然后解析数据并与已知列表进行比较。我可以运行上面的 psexec cmd,cmd 行没有任何问题,但是当我尝试运行与我的 C# 程序中的进程相同的命令时,没有返回任何数据进行解析。我可以看到 netstat 正在运行(cmd 窗口闪烁并显示 netstat 结果),但是 process.standardoutput 没有捕获流。如果我使用 ping 或除 psexec 之外的几乎所有其他内容作为参数,则会捕获流并将结果显示在我的文本框中。我也试过将文件名设置为 psexec.exe 并指定参数,但我得到了相同的结果。最后但同样重要的是,如果我在没有任何参数的情况下运行 psexec,我会在我的文本框中返回帮助回扣信息。如果我将 psexec.exe 作为文件名运行,或者如果我将 cmd.exe 作为文件名运行并将“/c psexec”指定为 args.

此时我只是想在本地执行时捕获 psexec 输出。稍后我会担心 psexec 到远程机器。任何帮助将不胜感激。

代码如下:

        System.Diagnostics.Process pProcess = new System.Diagnostics.Process();  
        pProcess.StartInfo.FileName = "cmd.exe";  
        pProcess.StartInfo.Arguments = "/c psexec netstat";  
        pProcess.StartInfo.UseShellExecute = false;  
        pProcess.StartInfo.RedirectStandardOutput = true;     
        pProcess.Start();
        string strOutput = pProcess.StandardOutput.ReadToEnd(); 
        pProcess.WaitForExit();

        if (pProcess.HasExited)
        {
            textBox1.Text = strOutput;
        }
        else
        {
            textBox1.Text = "TIMEOUT FAIL";
        }

最佳答案

我建议还捕获标准错误输出,以防那里报告任何内容。

此外,如果您在 64 位操作系统上运行,您可能会在 psexec 的“位数”与您的应用程序之间断开连接。如果是这种情况,请更改项目的平台以匹配 psexec 的平台,而不是构建为 Any CPU。

关于C# 和 psexec 进程输出重定向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8583388/

相关文章:

.net - 不调用 Process.Close() 是否存在重大问题?

c# - TextWriterTraceListener 不起作用

python - 仅当我使用 PsExec 将其作为远程服务运行时编译失败

c# - 每个服务器端事务的加载程序

javascript - 在没有 ActiveX 的情况下使用 javascript 启动 word?

powershell - PSExec 在 start-job 中运行时永远不会完成

c# - PsExec 在从编译为 "windows application"的非常简单的 c# 或 c++ gui 程序执行时挂起

c# - 二维数组与一维数组

c# - 添加元素的简单通用集合

c# - 如何在 asp.net 中为不同的浏览器定义不同的 css 文件?