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