Для запуска одной копии программы я настарте делаю такую вещь (код на паскале): Код (Text): function CheckAppRun: integer; var Map: THandle; begin Map := CreateFileMapping($FFFFFFFF, nil, PAGE_READONLY, 0, 32, '{DA2380A2-EEDD-438F-11F8-ADEE5F6B3638}'); if Map = 0 then Result := -1 else if GetLastError = ERROR_ALREADY_EXISTS then Result := 1 //прога уже запущена else Result := 0 end; Прикол в том, что данные фишка перестает работать, если я делаю так: загружаюсь в WinXP под обычным пользователем запускаю свою прогу под текущим пользователем, а затем запускаю прогу от имени админа и в результате запускается вторая копия проги, как это предотвратить, т.е. заставить CreateFileMapping создавать глобальный handle, т.е. чтобы всегда моглы быть запущено не более одной копии программы. Тот же самый вопрос и для OpenMutex. И еще один вопросик, каким лучше пользоваться способом CreateFileMapping или OpenMutex для запуска одной копии проги.
Когда запускаю первый копию проги Map = 1904, GetLastError = 0 Когда запускаю вторую копию проги под другим пользователем, например админом, Map = 0, GetLastError=0
Прям как в том анекдоте: "Ошибка: SUCCESS" Ну попробуй создавать этот мэппинг с security правами доступа GENERIC_ALL для Everybody.
Зачем использовать мепинг или мутекс при определении одного засушенного процесса? если не хочеш парится попробуй атом ...