怎么做:应用程序的第一个实例将执行一个进程,第二个实例将在以后终止该进程

时间:2010-11-23 15:16:46

标签: c#

我想创建一个行为如下的控制台应用程序:

  1. 应用的第一个实例将执行一个过程。
  2. 稍后执行的第二个实例会终止该过程。
  3. 有一种简单的方法吗?

    编辑: 第二个实例也终止了第一个实例及其自身。

    编辑2:

    更多细节方案如下:

    假设我的应用程序没有运行的实例。 如果我执行我的应用程序,新实例将运行。 该应用程序将创建一个执行Adobe Acrobat Reader X的过程(例如)。

    稍后,我再次执行我的应用程序只是为了杀死正在运行的Adobe Acrobat Reader X,当然还有它的主机(我的应用程序的第一个实例)。

2 个答案:

答案 0 :(得分:3)

您需要实现互斥锁才能执行此操作。

     private static Mutex mutex = null;

     private void CheckIfRunning() {

       string strId = "291B62B2-812A-4a13-A657-BA672DD0C93B";

        bool bCreated;

        try
        {
            mutex = new Mutex(false, strId, out bCreated);
        }
        catch (Exception)
        {
            bCreated = false;
            //Todo: Kill your process
        }

        if (!bCreated)
        {
            MessageBox.Show(Resources.lbliLinkAlreadyOpen, Resources.lblError,         MessageBoxButtons.OK, MessageBoxIcon.Warning);
            return;
        }
      }

答案 1 :(得分:1)

您可以使用已知名称创建流程。然后,当应用程序启动时,您可以获得包含正在运行的所有进程的列表。如果没有进程,你可以启动它,如果它已经存在,你可以终止进程并退出。

更优雅的解决方案是Max建议使用Mutex在进程之间进行通信。例如,确保不要使用相同名称杀死另一个进程。