Internet Explorer — C ++ BHO: определить экземпляр моего расширения, если он уже запущен или нет

У меня есть расширение ie, которое я написал на c ++ (atl), и проблема в том, что каждый раз, когда я открываю новую вкладку, запускается новый экземпляр моего расширения. Мне нужен способ узнать, есть ли уже запущенный экземпляр или нет.

Я думал, используя Mutex:

if(!Utils::IsAddonMutexRunning())
{
aHandle = Utils::CreateAddonMutex();
}

И когда IE выходит:

STDMETHODIMP cMyAddon::OnQuit()
{
if(m_pAddon!=NULL)
{
Utils::ReleaseMutex(aHandle);
m_pAddon->Quit();
}

return S_OK;
}

Проблема в том, что мьютекс никогда не освобождается, потому что onQuit не запускается.

Есть идеи или другие решения?

Редактировать:

проблема была, когда я проверил, существует ли мьютекс, благодаря ответу Шэна.

Я вызвал if (! Utils :: IsAddonMutexRunning ()) в методе SetSite:

bool  Utils::IsAddonMutexRunning()
{
HANDLE hMutexOneInstance = ::CreateMutex( NULL, FALSE,
_T("MYADDONMUTEX2013_____"));

DWORD retVal = WaitForSingleObject(hMutexOneInstance, 0);
bool ret = (retVal == WAIT_OBJECT_0  || retVal == WAIT_ABANDONED);CloseHandle(hMutexOneInstance);
return !ret;
}

0

Решение

Я могу быть наивным, так как раньше я никогда не разрабатывал плагин для IE, но вы пробовали использовать аналог WINAPI? CreateMutex с Global\ Пространство имен?

При выходе из потока, владеющего мьютексом, мьютекс будет автоматически освобожден.

http://msdn.microsoft.com/en-au/library/windows/desktop/ms682411%28v=vs.85%29.aspx

0

Другие решения

Других решений пока нет …