无法关闭C#中的进程

时间:2015-01-08 01:20:44

标签: c# winforms process executable exit

我正在运行一个可执行文件,从webform打开一个窗体。在visual studio中,winform程序运行一个方法,然后正确关闭窗体并关闭程序。但是,当我将同一个文件作为可执行文件运行时,它会保持窗体打开状态。我可以看到这个可执行进程仍然作为SmartSheetAPI.exe运行。

enter image description here

当我签入属性时,文件名是“SmartSheetAPI.exe”。如果我在任务管理器中结束此过程,它会关闭窗体,因此我知道这是问题所在。但是,我尝试在webform上使用以下代码来终止进程,但它再次无效。

Process process = new Process();
process.StartInfo.FileName = @"P:\Visual Studio 2013\Projects\Smartsheet\SmartsheetAPI\obj\Debug\SmartSheetAPI.exe";
process.Start();
foreach (var processes in Process.GetProcessesByName("SmartSheetAPI.exe"))
{
    process.Kill();
}

有谁知道如何关闭这件事。正如我所说,它在Visual Studio中的SmartSheetAPI程序中运行良好,但不会将窗口关闭为可执行文件。我只需要在运行该方法后关闭此进程。

编辑: 未关闭的进程是vshost.exe,因此它会使我的应用程序因某些原因而无法关闭(即Windows窗体保持打开状态)。如果我process.kill()这一切都按要求关闭。但是,问题是,当我运行该文件的可执行文件时,Windows窗体保持打开但我找不到运行的vshost.exe来关闭它?我已禁用它,现在不会关闭的进程是SmartSheetAPI.exe文件,它是我当前正在运行的程序。我只是想退出这个程序,但我尝试的任何东西似乎都没有用。

1 个答案:

答案 0 :(得分:2)

调用Kill方法后,调用WaitForExit方法等待进程退出,或检查HasExited属性以确定进程是否已退出。

Process process = new Process();
process.StartInfo.FileName = @"P:\Visual Studio 2013\Projects\Smartsheet\SmartsheetAPI\obj\Debug\SmartSheetAPI.exe";
process.Start();
// do some stuff while process is alive ...
process.Kill();
process.WaitForExit();
// do stuff after the process has been killed ...

有关详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill(v=vs.110).aspx

如果您的进程无法被杀死,那么可能还在等待其他事情。您可能想要调查而不是强制终止您的应用程序。