Заставить работать CreateFileMapping глобально

Тема в разделе "WASM.WIN32", создана пользователем Delphist, 25 янв 2008.

  1. Delphist

    Delphist New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2004
    Сообщения:
    4
    Для запуска одной копии программы я настарте делаю такую вещь (код на паскале):
    Код (Text):
    1. function CheckAppRun: integer;
    2. var
    3.   Map: THandle;  
    4. begin
    5.   Map := CreateFileMapping($FFFFFFFF, nil, PAGE_READONLY, 0, 32, '{DA2380A2-EEDD-438F-11F8-ADEE5F6B3638}');
    6.   if Map = 0 then
    7.     Result := -1
    8.   else if GetLastError = ERROR_ALREADY_EXISTS then
    9.     Result := 1 //прога уже запущена
    10.   else
    11.     Result := 0
    12. end;
    Прикол в том, что данные фишка перестает работать, если я делаю так: загружаюсь в WinXP под обычным пользователем запускаю свою прогу под текущим пользователем, а затем запускаю прогу от имени админа и в результате запускается вторая копия проги, как это предотвратить, т.е. заставить CreateFileMapping создавать глобальный handle, т.е. чтобы всегда моглы быть запущено не более одной копии программы.
    Тот же самый вопрос и для OpenMutex.
    И еще один вопросик, каким лучше пользоваться способом CreateFileMapping или OpenMutex для запуска одной копии проги.
     
  2. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    http://rsdn.ru/article/baseserv/avins.xml
     
  3. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Проблема, видимо, в пространстве имен.
     
  4. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    Delphist
    Чему равно значение переменной Map после вызова CreateFileMapping? А GetLastError?
     
  5. Delphist

    Delphist New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2004
    Сообщения:
    4
    Когда запускаю первый копию проги Map = 1904, GetLastError = 0
    Когда запускаю вторую копию проги под другим пользователем, например админом, Map = 0, GetLastError=0
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ну вот и различай по возвращаемому Map =)
     
  7. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    Прям как в том анекдоте: "Ошибка: SUCCESS" :)

    Ну попробуй создавать этот мэппинг с security правами доступа GENERIC_ALL для Everybody.
     
  8. mAgoja

    mAgoja New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    114
    Адрес:
    Ukraine
    Зачем использовать мепинг или мутекс при определении одного засушенного процесса? если не хочеш парится попробуй атом ...