如何使用Vb.NET或者C#终止进程?

时间:2020-03-06 14:33:04  来源:igfitidea点击:

我有一种情况,我必须检查用户是否已经打开了Microsoft Word。如果他有,那么我必须终止winword.exe进程并继续执行我的代码。

是否有任何简单的代码可以使用vb.net或者c#杀死进程?

解决方案

我们将要使用System.Diagnostics.Process.Kill方法。我们可以获取要使用的过程
System.Diagnostics.Proccess.GetProcessesByName。

示例已经在这里发布,但是我发现non.exe版本的效果更好,所以类似:

foreach ( Process p in System.Diagnostics.Process.GetProcessesByName("winword") )
{
    try
    {
        p.Kill();
        p.WaitForExit(); // possibly with a timeout
    }
    catch ( Win32Exception winException )
    {
        // process was terminating or can't be terminated - deal with it
    }
    catch ( InvalidOperationException invalidException )
    {
        // process has already exited - might be able to let this one go
     }
}

我们可能不必处理NotSupportedException,这表明该过程是远程的。

这是一个有关如何终止所有Word进程的简单示例。

Process[] procs = Process.GetProcessesByName("winword");

foreach (Process proc in procs)
    proc.Kill();

这样的事情会起作用:

foreach ( Process process in Process.GetProcessesByName( "winword.exe" ) )
            {
                    process.Kill();
                    process.WaitForExit();
            }

可以完全杀死Word进程(请参阅其他答复),但完全无礼和危险:如果用户在打开的文档中有重要的未保存更改怎么办?更不用说会留下的过时的临时文件...

在这方面,这可能是我们可以做到的(VB.NET):

Dim proc = Process.GetProcessesByName("winword")
    For i As Integer = 0 To proc.Count - 1
        proc(i).CloseMainWindow()
    Next i

这将以有序的方式关闭所有打开的Word窗口(如果适用,会提示用户保存其工作)。当然,在这种情况下,用户始终可以单击"取消",因此我们也应该能够处理这种情况(最好是放置"请关闭所有Word实例,否则我们将无法继续"对话框)。 )

我们可以绕过安全问题,只需检查Word进程是否正在运行,并要求用户关闭它,然后单击应用程序中的"继续"按钮,即可创建功能强大的应用程序。这是许多安装程序采用的方法。

private bool isWordRunning() 
{
    return System.Diagnostics.Process.GetProcessesByName("winword").Length > 0;
}

当然,只有在应用具有GUI的情况下,我们才能执行此操作