2010-11-23 30 views
1

我希望創建一個行爲如下控制檯應用程序:怎麼做:一個應用程序的第一個實例將執行過程,第二個實例將終止進程後

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

有沒有簡單的方法來做到這一點?

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

編輯2:

更多細節情況如下:

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

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

+0

你的意思是第一個應用程序啓動一個外部應用程序?哪一個進程完全被殺死?因此,應用程序實例1(進程A)啓動外部應用程序(進程B),然後啓動應用程序實例2(進程C),手動啓動進程A和進程B並終止? – 2010-11-23 15:26:00

+0

請看我的第二個編輯。 – xport 2010-11-23 15:36:00

回答

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

互斥鎖必須是靜態的? – xport 2010-11-23 15:28:12

1

您可以使用已知名稱創建一個進程。然後,當應用程序啓動時,您可以獲得所有正在運行的進程的列表。如果進程不在那裏,你可以啓動它,如果它已經在那裏,你可以殺死進程並退出。

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

相關問題