【问题标题】:Issues with running a PsExec process from code从代码运行 PsExec 进程的问题
【发布时间】:2011-07-25 06:53:27
【问题描述】:

我在尝试使用 PsExec 远程运行 .NET 命令行工具时遇到了一个奇怪的问题。

  1. 从命令行运行 PsExec 时,它可以正常运行并完成。

  2. 从控制台应用程序运行它时(创建一个进程, 运行 PsExec.exe 并为其提供必要的参数)——它是 运行正常。

  3. 从我们的内部自定义工具运行它时 用于运行不同的任务,它要么超时,要么不 成功完成。

这是我正在使用的代码:

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 中的错误吗? (这发生在其他程序、批处理文件等)。

【问题讨论】:

  • 您的自定义应用程序是否可能以不同的用户身份运行?还是使用不同的工作目录? (因为你没有设置)
  • 不,我的自定义工具只是将一些内容输出到控制台。它确实执行模拟以连接到另一个系统。但是从命令行运行时,所有这些都可以正常工作...
  • 从您的工具运行 psexe 时,在 TaskManager 中查看执行它的用户,看看它是否与您在其他测试场景中使用的相同

标签: c# .net process psexec start-process


【解决方案1】:

尝试将 -accepteula 添加到 psexec 的参数中

【讨论】:

    【解决方案2】:

    我不知道错误是什么,但我有一种预感,如果你重定向 stderr (RedirectStandardError = true) 并读取 stderr 流(就像你对 stdout 所做的那样),它会告诉你你。或者,在调试时离开CreateNoWindow = false,也许你会看到控制台消息(尤其是在它正在等待按键时;否则它可能会消失得太快而无法注意到)。

    请注意,如果进程未终止,您可能需要在 stdout/stderr 上设置异步读取器。您可以在额外线程上执行此操作,也可以通过 OutputDataReceived / ErrorDataReceived 事件执行此操作(您还需要将 EnableRaisingEvents 设置为 true)。


    如果那个仍然不起作用;您可以尝试使用UseShellExecute=true 运行。这意味着您将无法重定向 IO,因此您可能必须使用 > / >> 等将输出通过管道传输到文件(最好是临时文件),然后读取文件。

    【讨论】:

    • 进程确实没有终止,尽管我在操作结束时调用 p.Close()。远程进程(2 个进程 - PSEXECSVC 和我的应用程序)也保持运行。
    • 不重定向输出,使用窗口和shell执行命令时,运行正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 2021-01-01
    相关资源
    最近更新 更多