// DllInstall - Adds/Removes entries to the system registry per user // per machine. STDAPI DllInstall(BOOL bInstall, LPCWSTR pszCmdLine) { HRESULT hr = E_FAIL; static const wchar_t szUserSwitch[] = _T("user"); if (pszCmdLine != NULL) { if (_wcsnicmp(pszCmdLine, szUserSwitch, _countof(szUserSwitch)) == 0) { AtlSetPerUserRegistration(true); } } if (bInstall) { hr = DllRegisterServer(); if (FAILED(hr)) { DllUnregisterServer(); } } else { hr = DllUnregisterServer(); } return hr; }
STDAPI DllInstall(BOOL bInstall, LPCWSTR pszCmdLine) { HRESULT hr = E_FAIL; // MSVC will call "regsvr32 /i:user" if "per-user registration" is set as a // linker option - so handle that here (its also handle for anyone else to // be able to manually install just for themselves.) static const wchar_t szUserSwitch[] = L"user"; if (pszCmdLine != NULL) { if (_wcsnicmp(pszCmdLine, szUserSwitch, _countof(szUserSwitch)) == 0) { AtlSetPerUserRegistration(true); // But ATL still barfs if you try and register a COM category, so // just arrange to not do that. _AtlComModule.m_ppAutoObjMapFirst = _AtlComModule.m_ppAutoObjMapLast; } } if (bInstall) { hr = DllRegisterServer(); if (FAILED(hr)) { DllUnregisterServer(); } } else { hr = DllUnregisterServer(); } return hr; }
STDAPI DllUnregisterServerLocal(void) { // registers object, typelib and all interfaces in typelib AtlSetPerUserRegistration(true); HRESULT hr = _AtlModule.DllUnregisterServer(); return hr; }
STDAPI DllInstall(BOOL bInstall, LPCWSTR pszCmdLine) { HRESULT hr = E_FAIL; static const wchar_t szUserSwitch[] = L"user"; if ( pszCmdLine != NULL ) { #if defined(_MSC_VER) && (_MSC_VER >= 1500) // No VS2005 if ( _wcsnicmp(pszCmdLine, szUserSwitch, _countof(szUserSwitch)) == 0 ) AtlSetPerUserRegistration(true); #endif } if ( bInstall ) { hr = DllRegisterServer(); if ( FAILED(hr) ) DllUnregisterServer(); } else hr = DllUnregisterServer(); return hr; }