ProcessStartInfo psi = new ProcessStartInfo(BatchFile)
Process p = Process.Start(psi)
为什么p.ID
比进程id不同可见WindowsTaskManager不同的参考距离的Process.Start
(BatchFile
是路径与适当的参数外部程序)
ProcessStartInfo psi = new ProcessStartInfo(BatchFile)
Process p = Process.Start(psi)
为什么p.ID
比进程id不同可见WindowsTaskManager不同的参考距离的Process.Start
(BatchFile
是路径与适当的参数外部程序)
进程ID启动可执行文件是唯一有意义的,而这个过程是活的。首先要检查的是.HasExited
- 如果是这样,忽略进程ID;它不再有任何意义。
有很多,你可以开始做,没有任何过程中遗留即使你能明显看到它仍然在屏幕上方式:
我以为批处理文件是某种形式的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
不同。
我会假设,这是因为p.ID
是正在运行的批处理文件,而不是进程的ID通过批处理文件启动的进程的ID。
您可以直接通过Process.Start
使用correct overload
http://stackoverflow.com/questions/2316596/system-diaganostics-process-id-isnt-the -same-process-id-shown-in-task-manger-wh – 2011-05-31 08:17:56
你的意思是'Process p = Process.Start(psi);'? – 2011-05-31 08:20:05
为了说明,BatchFile是一个真正的可执行文件,还是它是一个“正常”意义上的批处理文件(即调用其他可执行文件的脚本,其中一个是您感兴趣的文件?)。如果它是前者,那么它应该如你所期望的那样。但是,如果是后者,那么进程ID将是执行脚本的进程的ID,然后该脚本将启动感兴趣的程序,该程序将具有不同的ID。 – cristobalito 2011-05-31 08:22:09