1
ProcessStartInfo psi = new ProcessStartInfo(BatchFile)

Process p = Process.Start(psi)

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

BatchFile是带有适当参数的外部程序的路径)

4

3 回答 3

2

我假设 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.IdPID与任务管理器中显示的不同。

于 2011-05-31T08:19:16.613 回答
2

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

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

于 2011-05-31T08:19:29.847 回答
1

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

有很多方法可以让你开始一些事情并且没有任何进程,即使你可以明显地在屏幕上看到它

  • 如果它是产生某些东西并退出的脚本/bat/cmd (请记住:您正在观看脚本,而不是“某物”)
  • 如果 exe 在内部执行一些 inter-exe voodoo - 例如,大多数办公应用程序和 Internet Explorer 都会这样做;如果存在现有进程,则将 args 转发给进程进行处理,并立即退出
于 2011-05-31T08:51:51.653 回答