0

SO 周围有很多不同的例子,使用mutexEnvironment.Exit(0)(控制台应用程序),Application.Exit()(Win forms)和很多帖子说不要使用process.kill()

有人可以解释我如何关闭我的应用程序的其他实例的政治不正确性。它是一个 Windows 窗体应用程序。这似乎在我的本地环境中运行良好,但我担心存在一些我不知道的严重问题。

    // I get the current process name and ID
    string currentProcName = Process.GetCurrentProcess().ProcessName;
    int currentProcID = Process.GetCurrentProcess().Id;

    // I then get a list of all process running under this name
    Process[] currentProcess = Process.GetProcessesByName(currentProcName);

    foreach (Process proc in currentProcess)
    {
        // if the found process id is using the same name, but not this current id, kill it.
        if (proc.Id != currentProcID)
        {

            proc.Kill(); // Documentation says it imediatly stops the associated process.
            proc.Close(); // Documentation says that it frees all resources associated with this component

        }
    }  

根据文档,我认为这是关闭正在运行的应用程序的其他实例的合理方法。如果有的话,有经验的可以指出一些问题吗?除了原子性,我将添加异常处理。

4

1 回答 1

0

我必须在这里向 Raymond Chen 提供参考:

到目前为止,以合作方式关闭进程是摆脱它的最佳方法:它允许发生正确的关闭/关闭。杀死一个进程基本上是调用TerminateProcess,它会完全停止它正在做的任何事情并杀死臭虫。

于 2013-02-08T20:32:30.397 回答