В моей программе на C ++ / winapi я использую объект события, чтобы определить, запущен ли экземпляр моего приложения, чтобы не допустить запуска второго экземпляра.
Но в то же время я хочуразрешить запуск нескольких экземпляров программы, если они запущены с использованием другой учетной записи пользователя.Например, используя команду "runas".(То есть: для каждой учетной записи пользователя только 1 экземпляр может работать одновременно)
Я использую код, который выглядит следующим образом:
HANDLE hSingleInstance=OpenEvent(EVENT_MODIFY_STATE,FALSE,
"Local\\SingleInstanceEventName");
if(hSingleInstance!=NULL) {
// there is an instance already running
SetEvent(hSingleInstance);// let know the 1st instance that we are trying to start
CloseHandle(hSingleInstance);
return 0; // exit the program
}
else {
// this is the 1st instance
hSingleInstance=CreateEvent(NULL,FALSE,FALSE, "Local\\SingleInstanceEventName");
}
Он работает, как и ожидалось в XP - я могу запустить только1 экземпляр, использующий одну и ту же учетную запись пользователя, и я могу запустить несколько экземпляров, используя несколько учетных записей пользователей.
Но в Windows 7 функция OpenEvent () всегда «находит» мой объект события, даже если объект события созданиспользуя другую учетную запись пользователя.Из-за этого я не могу запустить несколько экземпляров, используя разные учетные записи пользователей (по желанию).
Что я должен изменить в своем коде, чтобы разрешить запуск нескольких экземпляров с использованием разных учетных записей пользователей в Windows 7?Или, может быть, мой подход совершенно неправильный, тогда какой из них правильный?
спасибо