簡體   English   中英

怎么做:應用程序的第一個實例將執行一個進程,第二個實例將在以后終止該進程

[英]How to do: The first instance of an app will execute a process, second instance will kill the process later

我想創建一個行為如下的控制台應用程序:

  1. 應用程序的第一個實例將執行一個進程。
  2. 稍后執行的第二個實例將終止該進程。

有一個簡單的方法嗎?

編輯:第二個實例也終止第一個實例和它自己。

編輯2:

更多細節場景如下:

假設沒有運行我的應用程序的實例。 如果我執行我的應用程序,新實例將運行。 該應用程序將創建一個執行Adobe Acrobat Reader X的過程(例如)。

之后,我再次執行我的應用程序只是為了殺死正在運行的Adobe Acrobat Reader X,當然還有它的主機(我的應用程序的第一個實例)。

您需要實現互斥鎖才能執行此操作。

     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;
        }
      }

您可以使用已知名稱創建進程。 然后,當應用程序啟動時,您可以獲得包含正在運行的所有進程的列表。 如果進程不在那里你可以啟動它,如果它已經存在,你可以終止進程並退出。

更優雅的解決方案是Max建議使用Mutex在進程之間進行通信。 例如,確保不要使用相同名稱殺死另一個進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM