存儲流程實例中的一個字段,請調用Process.CloseMainWindow或Process.Kill就可以了。
CloseMainWindow嚮應用程序發送一個窗口關閉消息,該消息讓用戶在關閉之前執行任何所需的操作,甚至可以決定忽略該請求。
另一方面,殺死,要求操作系統直接殺死目標進程,可能會導致數據丟失。它也是一個異步調用,這意味着您必須調用Process.WaitForExit來等待進程結束。
在這兩種情況下,如果目標進程在調用Kill或CloseMainWindow之前終止,或者終止進程或操作系統根本無法終止它,則需要處理可能引發的異常(可能由於安全限制)
爲了避免一些例外,你可以簡單地檢查孩子申請是否試圖殺死它,之前完成致電Process.HasExited
你可以嘗試這樣的事:
Process _childApp;
private void SpawnProcess()
{
...
if (_MyPath != "")
{
_childApp= new Process();
string str = @_MyPath;
_childApp.StartInfo.FileName = str;
_childApp.Start();
}
else
{
MessageBox.Show("Path Empty", "Error", MessageBoxButton.OK,
MessageBoxImage.Error);
}
...
}
private void StopProcess()
{
if (_childApp.HasExited)
return;
try
{
_childApp.Kill();
if (!_childApp.WaitForExit(5000))
{
MessageBox.Show("Closing the app takes too long","Warning",
MessageBoxButton.OK,
MessageBoxImage.Error);
}
}
catch(Exception exc)
{
MessageBox.Show(exc.ToString(),"Failed to close app",
MessageBoxButton.OK,
MessageBoxImage.Error);
}
}
你需要 發現問題的過程中,一旦發現 - 你殺了。 http://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill(v=vs.110).aspx –
@Ahmedilyas OP已經有了對過程對象 –
的引用yup,I re - 讀它並錯過它。抱歉! –