ProcessStartInfo psi = new ProcessStartInfo(BatchFile)
Process p = Process.Start(psi)
为什么p.ID
与WindowsTaskManager 中可见的进程id不同
(BatchFile
是具有适当参数的外部程序的路径(
我认为这是因为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转发给进程要处理的,然后立即退出