2013-03-03 31 views
1

我創建的應用程序包含通知圖標,並且它在後臺保持活動狀態(以及某種方式)。問題是,當用戶點擊我的應用程序的圖標時,應用程序將再次啓動,所以我有兩個通知圖標和兩個活動在後臺和兩個一切。如果用戶再次點擊該圖標,則會出現三種情況,......因此,我應該停止此操作。我有一種設置標誌並將其值設置爲註冊表的想法,當我的應用程序想要啓動時,在表單加載事件中,通過讀取值終止應用程序。但我想要一個更專業的方式來處理它。例如根本不開始。如何防止我的應用程序一次又一次啓動

回答

1

這是this答案這是一個this重複。您檢查您的應用程序的條目構造函數是否已在運行該應用程序。

static void Main() 
{ 
    Process currentProcess = Process.GetCurrentProcess(); 
    var runningProcess = (from process in Process.GetProcesses() 
          where 
          process.Id != currentProcess.Id && 
          process.ProcessName.Equals(
           currentProcess.ProcessName, 
           StringComparison.Ordinal) 
          select process).FirstOrDefault(); 
    if (runningProcess != null) 
    { 
     ShowWindow(runningProcess.MainWindowHandle, SW_SHOWMAXIMIZED); 
     return; 
    } 
} 
+0

你看,我說的是點擊應用程序本身(不是它的通知圖標)帶來這種情況。我的意思是當點擊我的app.exe文件時,會出現此問題。 – roostaamir 2013-03-03 14:17:59

+0

我看到他說什麼時候點擊圖標,他正在談論實際的桌面圖標。不知道我的代碼是否在任何地方掛起。如果我找不到它,我會刪除它。 – 2013-03-03 14:18:44

1

創建某種形式的應用程序創建的全局互斥/事件句柄,然後在打開的例程中檢查它是否存在,如果存在,則退出啓動路由。

我在這個答案中給出了一些基本的代碼(針對不同的問題),但它展示了你正在嘗試做的事情。

UnauthorizedAccessException on Openexisting global mutex

+0

請你在你說的有點業餘的方式說話?!也許一個代碼示例什麼?因爲這是有點我的第一個真正的應用程序!感謝 – roostaamir 2013-03-03 14:13:27

+0

只是要清楚,你的時候啓動一個exe的新實例,它將在一個不同的STA中打開。他們不共享變量,所以你不能使用互斥或​​事件,因爲它們不共享。我錯了嗎? – 2013-03-03 14:29:48

+1

GLOBAL \ Mutex在整個Windows計算機上都可見。如果您希望能夠連接到它們,您將需要授予權限,但如果它們存在並且您沒有權限,則會提供例外。 – 2013-03-03 14:37:40

相關問題