当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用Vb.NET或C#终止进程?》经验,为你挑选了5个好方法。

我有一个场景,我必须检查用户是否已经打开了Microsoft Word.如果他有,那么我必须杀死winword.exe进程并继续执行我的代码.

有没有人有任何使用vb.net或c#杀死进程的直接代码?



1> Blair Conrad..:

您将需要使用System.Diagnostics.Process.Kill方法.您可以使用System.Diagnostics.Proccess.GetProcessesByName获取所需的进程 .

这里已经发布了一些示例,但我发现非.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,这表明该过程是远程的.


没有管理员或其他权限,此方法将无法使用.

2> mdb..:

彻底杀死Word进程是可能的(参见其他一些回复),但是直接粗鲁和危险:如果用户在打开的文档中有重要的未保存更改,该怎么办?更不用说这将留下的陈旧临时文件......

这可能就这方面而言(VB.NET):

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

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



3> Nick Berardi..:

这是一个如何杀死所有Word进程的简单示例.

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

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



4> Chris Lawlor..:

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

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

当然,只有当您的应用程序具有GUI时,您才能执行此操作



5> Vova Popov..:
    public bool FindAndKillProcess(string name)
    {
        //here we're going to get a list of all running processes on
        //the computer
        foreach (Process clsProcess in Process.GetProcesses()) {
            //now we're going to see if any of the running processes
            //match the currently running processes by using the StartsWith Method,
            //this prevents us from incluing the .EXE for the process we're looking for.
            //. Be sure to not
            //add the .exe to the name you provide, i.e: NOTEPAD,
            //not NOTEPAD.EXE or false is always returned even if
            //notepad is running
            if (clsProcess.ProcessName.StartsWith(name))
            {
                //since we found the proccess we now need to use the
                //Kill Method to kill the process. Remember, if you have
                //the process running more than once, say IE open 4
                //times the loop thr way it is now will close all 4,
                //if you want it to just close the first one it finds
                //then add a return; after the Kill
                try 
                {
                    clsProcess.Kill();
                }
                catch
                {
                    return false;
                }
                //process killed, return true
                return true;
            }
        }
        //process not found, return false
        return false;
    }

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有