我試圖讓我的應用程序只運行一次在電腦上,我的應用程序需要comunicate到WebService所以它是壞讓它運行多次,使用互斥這個目前即時通訊:每臺計算機的應用程序的一個實例,如何?
MyMsg := RegisterWindowMessage('My_Unique_App_Message_Name');
Mutex := CreateMutex(nil, True, 'My_Unique_Application_Mutex_Name');
if (Mutex = 0) OR (GetLastError = ERROR_ALREADY_EXISTS) then
exit;
目前這可以限制每個用戶1個應用程序的實例,但是我的應用程序正在Windows Server環境中使用,其中一次有20多個用戶在使用,所以我需要嚴格限制每個服務器只運行一次,我試圖做的是將Mutex聲明爲全局互斥體,但是當我執行下一個代碼時,它無法工作。
MyMsg := RegisterWindowMessage('My_Unique_App_Message_Name');
Mutex := CreateMutex(nil, True, 'Global\My_Unique_Application_Mutex_Name');
if (Mutex = 0) OR (GetLastError = ERROR_ALREADY_EXISTS) then
begin
exit
所以我做錯了什麼?有沒有其他可靠的方式不讓我的應用程序的第二個實例運行?
我認爲您需要定義「根本不起作用」的含義。 'CreateMutex'是否返回0?如果是這樣,GetLastError會返回什麼?也許它是'ERROR_ACCESS_DENIED'? –
@SertacAkyuz:原始檢查無誤。如果'CreateMutex()'失敗,或者互斥量已經存在,請退出應用程序。如果互斥量句柄不爲0,則您的更改將繞過「已存在」檢查,因爲'CreateMutex()'返回現有互斥量的句柄。請記住,默認情況下,Delphi會短路布爾表達式。 –
@Remy - 好吧,看起來很好,謝謝。此外,我混合或與...刪除註釋不會導致混淆.. –