我试图让我的应用程序只运行一次在电脑上,我的应用程序需要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 - 好吧,看起来很好,谢谢。此外,我混合或与...删除注释不会导致混淆.. –