Process.Start返回了不同的引用

本文关键字:引用 Start 返回 Process | 更新日期: 2023-09-27 17:57:57

ProcessStartInfo psi = new ProcessStartInfo(BatchFile)
Process p = Process.Start(psi)

为什么p.ID与WindowsTaskManager 中可见的进程id不同

(BatchFile是具有适当参数的外部程序的路径(

Process.Start返回了不同的引用

我认为这是因为p.ID是运行批处理文件的进程的id,而不是由批处理文件启动的进程的id。

您可以使用正确的重载直接通过Process.Start启动可执行文件

我假设BatchFile是某种cmd或bat文件,可以逐个运行其他进程
因此,在Windows任务管理器中,您实际上可以看到由批处理文件运行的进程的ID。

示例

如果我做这个

 var p = Process.Start("notepad.exe");

p.Id将与任务管理器中的PID相匹配。

然而,如果我这样做:

 var p = Process.Start("test.cmd"); // test.cmd has notepad.exe call inside

p.Id将不同于任务管理器中显示的PID

进程ID只有在进程处于活动状态时才有意义。首先要检查的是.HasExited-如果这是真的,忽略进程ID;它不再有任何意义。

有很多方法可以启动一些东西,并且没有剩余的过程,即使你显然可以在屏幕上看到它

  • 如果是一个脚本/bat/cmd产生了并退出(请记住:您正在观看脚本,而不是"something"(
  • 如果exe在内部执行一些inter-exe-vodoo操作,例如,大多数office应用程序和internet explorer都会这样做;如果存在现有进程,它会将args转发给进程要处理的,然后立即退出