我在C#中創建了一個系統托盤應用程序,它只是在後臺運行。它使用Exchange Web服務監聽郵件服務器,並在每次收到郵件時執行一組操作。它使用了大量的Excel應用程序,如果我將程序轉換爲服務時不能正常工作(這就是爲什麼它必須是系統應用程序)。如何確保程序只在Windows Server 2012的所有會話中運行一次?
重要的是,程序不會一次運行多次。我添加了一個互斥鎖,因此我無法在同一個會話中多次運行該程序。但是,當我登錄Windows Server上的另一個會話(每個用戶可能有兩個會話)時,問題在於,該程序在系統托盤中不可見,我可以再次打開它,因此它運行兩次,每次運行一次會話。我如何防止這種情況?
感謝
在例如文件中創建一個具有保留名稱的文件。 'C:\ temp'並保持鎖定,所以實例#2會注意並退出? –
這是互斥體的名稱?如果互斥體名稱以全局\開始,則對所有終端服務會話都是全局的。您還應該檢查互斥鎖權限,以便所有用戶都可以訪問它。 –
看到這個SO問題http://stackoverflow.com/questions/229565/what-is-a-good-pattern-for-using-a-global-mutex-in-c –