Andrew Dunstan wrote:
>>
>> Has anyone considered not using a file lock on windows? CreateMutex
>> might do the trick if provided a mutex name, making it global rather
>> than process bound. OpenMutex can be used to test if the mutex exists
>> or if it is currently locked. I guess it would stay locked. If there
>> is a crash, it is automatically closed by the os.
>>
>> The docs state the system closes the handle (mutex) when the process
>> terminates and makes no mention of this being a lingering action like
>> LockFileEx. It sounds like the mutex is closed ASAP when the process
>> terminates, just like file handles.
>>
>
> Please review the previous discussion. This whole thing came about
> because of major problems in handling Global objects.
>
> cheers
>
> andrew
>
>
I did review it which is why I proposed global mutexes. No one spoke
about mutexes. The conversation was about global sections, like file
mappings. Global sections fall under a stricter security policy than
global mutexes. I just ran the below code on Vista as a dumb-dumb
non-administrative user (no SeCreateGlobalPrivilege) and it worked like
a charm (compiled with VisualStudio.NET 2003 v7 13.10.3077). Maybe I am
missing something?
// run the below from different consoles. the first run will
// create the mutex and sleep for 10 seconds before destroying it.
// The other console will open the existing mutex.
#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv)
{ HANDLE h = CreateMutex(NULL, TRUE, "Global\\__postmaster__");
if(h == NULL) { printf("CreateMutex: %u\n", GetLastError()); return 1; }
if(GetLastError() == ERROR_ALREADY_EXISTS) { printf("postmaster is running\n"); } else { printf("postmaster
mutexcreated and ownership aquired\n"); Sleep(10000); }
CloseHandle(h); return 0;
}
--
Andrew Chernow
eSilo, LLC
every bit counts
http://www.esilo.com/