【问题标题】:Help needed to get Process ID for PsExec.exe in C#?在 C# 中获取 PsExec.exe 的进程 ID 需要帮助吗?
【发布时间】:2009-12-10 08:38:53
【问题描述】:

我正在使用以下代码调用 PsExec.exe,它在两台服务器中调用我的控制台应用程序,我无法获取被调用进程(我的控制台应用程序)的 ProcessId。

process.StandardOutput.ReadToEnd());只给我服务器名称,而不是完整的内容。

您能帮我获取远程服务器上 PsExec.exe 生成的进程 ID 吗??

        Process process = new Process();
        ProcessStartInfo psi = new ProcessStartInfo(@"PsExec.exe");
        psi.UseShellExecute = false;
        psi.RedirectStandardOutput = true;
        psi.RedirectStandardError = true;
        psi.RedirectStandardInput = true;
        psi.WindowStyle = ProcessWindowStyle.Minimized;
        psi.CreateNoWindow = true;
        psi.Arguments = @"-i -u Username -p xxxxxx \\server1,server2 C:\data\GridWorker\GridWorker.exe 100000";
        process.StartInfo = psi;
        process.Start();

        Console.WriteLine(process.StandardOutput.ReadToEnd());

【问题讨论】:

    标签: c# wmi psexec


    【解决方案1】:

    尝试将-d 参数添加到 PsExec 命令行。

    不要等待申请 终止。仅将此选项用于 非交互式应用程序。

    这应该正确地将进程 ID 返回到 StandardError。

    例子:

    ProcessStartInfo psi = new ProcessStartInfo(
        @"PsExec.exe",
        @"-d -i -u user -p password \\server C:\WINDOWS\system32\mspaint.exe")
                               {
                                   UseShellExecute = false,
                                   RedirectStandardOutput = true,
                                   RedirectStandardError = true,
                                   RedirectStandardInput = true,
                                   WindowStyle = ProcessWindowStyle.Minimized,
                                   CreateNoWindow = true
                               };
    Process process = Process.Start(psi);
    
    Console.WriteLine(process.StandardError.ReadToEnd());
    

    输出:

    PsExec v1.94 - Execute processes remotely
    Copyright (C) 2001-2008 Mark Russinovich
    Sysinternals - www.sysinternals.com
    
    C:\WINDOWS\system32\mspaint.exe started with process ID 5896.
    

    【讨论】:

    • 对不起,我忘了在我的示例中添加 -d 参数。 “这应该正确地将进程 ID 返回到 StandardError。”可以给点样品吗?
    【解决方案2】:

    我认为你不能让 PsExec 以你想要的方式返回 pid。

    但是,您可以将自己的应用程序启动器包装器编写为控制台应用程序,并让它返回 pid。然后,您可以让 PsExec 始终通过调用此“AppStarter”来启动应用程序,从而返回您的 pid。

    类似的东西:

    namespace AppStarter
    {
        class Program
        {
            static void Main(string[] args)
            {
                Process process = new Process();
                ProcessStartInfo psi = new ProcessStartInfo(args[0]);
                psi.UseShellExecute = false;
                psi.RedirectStandardOutput = true;
                psi.RedirectStandardError = true;
                psi.RedirectStandardInput = true;
                psi.Arguments = string.Join(" ", args, 1, args.Length - 1);
                process.StartInfo = psi;
                process.Start();
                Console.WriteLine("Process started with PID {0}", process.Id);
            }
        }
    }
    

    [这是一个粗略且现成的示例,没有异常处理等 - 仅作为说明]

    你上面的代码现在变成了类似

     Process process = new Process();
        ProcessStartInfo psi = new ProcessStartInfo(@"AppStarter.exe");
        psi.UseShellExecute = false;
        psi.RedirectStandardOutput = true;
        psi.RedirectStandardError = true;
        psi.RedirectStandardInput = true;
        psi.WindowStyle = ProcessWindowStyle.Minimized;
        psi.CreateNoWindow = true;
        psi.Arguments = @"PsExec.exe -i -u Username -p 26.06.08 \\server1,server2 C:\data\GridWorker\GridWorker.exe 100000";
        process.StartInfo = psi;
        process.Start();
    
        Console.WriteLine(process.StandardOutput.ReadToEnd());
    

    【讨论】:

      【解决方案3】:

      到目前为止,我理解了最初的问题,任务是获取远程机器上远程启动进程的 PID。这是真的?在这种情况下,没有一个答案是真正有用的。

      您必须为每台远程计算机创建 WMI 查询,以获取已启动的进程。这可以使用“Win32_ProcessStartTrace”类来完成。

      如果您需要更多帮助,请告诉我。

      br--马布拉

      【讨论】:

      • PsExec 在启动后返回远程进程 ID 就好了。他只是没有从正确的流中读取它(StandardOutput 而不是 StandardError)。
      猜你喜欢
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 2016-02-11
      • 2013-12-12
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多