从代码运行PsExec进程的问题在尝试使用PsExec远程运行.NET命令行工具时,我遇到了一个奇怪的问题。从命令行运行PsExec时,它可以正常运行并完成。从控制台应用程序运行它时(创建进程,使用必要的参数运行PsExec.exe)-它工作正常。从我们用来运行不同任务的内部自定义工具运行它时,它会超时或无法成功完成。这是我正在使用的代码:Processp=newProcess();p.StartInfo.FileName=@"C:PsExec.exe";p.StartInfo.RedirectStandardOutput=true;p.StartInfo.UseShellExecute=false;p.StartInfo.CreateNoWindow=true;stringarg="-snapshot-displayC:*.msi-s";p.StartInfo.Arguments=@"\10.161.203.106-uuser-ppwd-cfC:FVT.exe"+arg;Logger.Info(this,"启动进程");p.开始();varended=p.WaitForExit(60*1000);if(!ended){thrownewException("进程超时。");}Logger.Info(this,"进程结束");使用(StreamReadersr=p.StandardOutput){stringbuffer=sr.ReadToEnd();Logger.Info(这个,缓冲区);}此代码可以从cmd行或独立应用该程序运行良好!我不知道这里还有什么问题。我们的内部工具生成一个新线程并在其中运行这段代码。更新:命令行窗口中的命令行+args-有效。相同的cmd+args,作为带有RedirectOutput的进程运行-停止并在超时时返回。这可能是.NET中的错误吗?(这适用于其他程序、批处理文件等)。我不知道错误是什么,但我有一种预感,如果您重定向stderr(RedirectStandardError=true)并读取stderr流(就像您对stdout所做的那样),它会告诉您。或者,在调试时让CreateNoWindow=false,您可能会看到控制台消息(尤其是在等待按键时;否则它可能会消失得太快而无法注意到)。请注意,如果进程未终止,您可能需要在stdout/stderr上设置异步读取器。您可以在额外的线程上或通过OutputDataReceived/ErrorDataReceived事件执行此操作(您还需要将EnableRaisingEvents设置为true)。如果还是不行;您可以尝试使用UseShellExecute=true运行。这意味着您将无法重定向IO,因此您可能必须使用>/>>等将输出通过管道传输到文件(最好是临时文件),然后读取该文件。尝试将-accepteula添加到psexec的参数中。以上就是C#学习教程:从代码运行PsExec进程的问题分享的全部内容。整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
