You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ProcessStartInfo传递多参数并实现依次执行?

解决ProcessStartInfo多命令仅执行最后一个的问题

你当前的代码里连续两次给psexec.Arguments赋值,第二次的内容直接覆盖了第一次,所以最终只会执行最后一次设置的命令。要让多个命令依次运行,可参考以下几种方案:

方案一:在同一个psexec调用中串联多个命令

通过cmd的命令串联符&(无论前序命令成功与否都执行后续命令)或&&(仅前序命令执行成功才执行后续命令),把多个WMIC命令合并到同一个Arguments中,注意用双引号包裹cmd的/c参数后的内容,避免命令拆分错误。

示例代码:

ProcessStartInfo psexec = new ProcessStartInfo(@"D:\psexec.exe");
// 这里示例串联两个WMIC命令,可根据实际需求修改
psexec.Arguments = $@"\\{ip} -s cmd /c ""c:\Windows\System32\wbem\WMIC.exe process get name & c:\Windows\System32\wbem\WMIC.exe service get name""";
Process.Start(psexec);

方案二:依次独立启动多个进程并等待执行完成

如果需要严格按顺序执行命令,且前一个命令完成后再启动下一个,可以分别创建Process实例,每次启动后调用WaitForExit()等待进程执行完毕,再启动下一个命令。

示例代码:

// 执行第一个命令
ProcessStartInfo psexec1 = new ProcessStartInfo(@"D:\psexec.exe");
psexec1.Arguments = $@"\\{ip} -s cmd /c c:\Windows\System32\wbem\WMIC.exe [第一个WMIC具体参数]";
Process proc1 = Process.Start(psexec1);
proc1.WaitForExit(); // 等待第一个命令执行完成

// 执行第二个命令
ProcessStartInfo psexec2 = new ProcessStartInfo(@"D:\psexec.exe");
psexec2.Arguments = $@"\\{ip} -s cmd /c c:\Windows\System32\wbem\WMIC.exe [第二个WMIC具体参数]";
Process proc2 = Process.Start(psexec2);
proc2.WaitForExit();

方案三:通过批处理文件执行多命令

如果需要执行的命令较多,可以把所有WMIC命令写入一个批处理文件,再通过psexec调用这个批处理文件,便于管理和维护。

  1. 先创建批处理文件(比如remote_wmic_commands.bat),内容如下:
c:\Windows\System32\wbem\WMIC.exe [第一个WMIC具体参数]
c:\Windows\System32\wbem\WMIC.exe [第二个WMIC具体参数]
  1. 然后在C#中调用:
ProcessStartInfo psexec = new ProcessStartInfo(@"D:\psexec.exe");
psexec.Arguments = $@"\\{ip} -s cmd /c ""C:\指定路径\remote_wmic_commands.bat""";
Process.Start(psexec);

内容的提问来源于stack exchange,提问作者zaknafein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:16:11