Article ID: 179690
Article Last Modified on 12/2/2003
class CExeModule : public CComModule
{
public:
LONG Unlock();
DWORD dwThreadID;
#ifdef _ATL_STATIC_REGISTRY
// Statically linking to Registry component.
HRESULT WINAPI UpdateRegistryFromResourceS(UINT nResID,
BOOL bRegister, struct _ATL_REGMAP_ENTRY* pMapEntries = NULL);
HRESULT WINAPI UpdateRegistryFromResourceS(LPCTSTR lpszRes,
BOOL bRegister, struct _ATL_REGMAP_ENTRY* pMapEntries = NULL);
#else
HRESULT WINAPI UpdateRegistryFromResourceD(LPCTSTR lpszRes,
BOOL bRegister, struct _ATL_REGMAP_ENTRY* pMapEntries = NULL);
HRESULT WINAPI UpdateRegistryFromResourceD(UINT nResID,
BOOL bRegister, struct _ATL_REGMAP_ENTRY* pMapEntries = NULL);
#endif
};
#ifdef _ATL_STATIC_REGISTRY
#include <statreg.h>
#endif
#ifdef _ATL_STATIC_REGISTRY
// Statically linking to Registry component.
HRESULT WINAPI CExeModule::UpdateRegistryFromResourceS(UINT nResID,
BOOL bRegister, struct _ATL_REGMAP_ENTRY* pMapEntries)
{
USES_CONVERSION;
CRegObject ro;
TCHAR szModule[_MAX_PATH];
GetModuleFileName(_Module.GetModuleInstance(), szModule,
_MAX_PATH);
TCHAR szModuleShort[_MAX_PATH];
// Convert to short file name.
if (::GetShortPathName(szModule, szModuleShort, _MAX_PATH))
{
lstrcpy(szModule, szModuleShort);
}
LPOLESTR pszModule = T2OLE(szModule);
ro.AddReplacement(OLESTR("Module"), pszModule);
if (NULL != pMapEntries)
{
while (NULL != pMapEntries->szKey)
{
_ASSERTE(NULL != pMapEntries->szData);
ro.AddReplacement(pMapEntries->szKey, pMapEntries->szData);
pMapEntries++;
}
}
LPCOLESTR szType = OLESTR("REGISTRY");
return (bRegister) ? ro.ResourceRegister(pszModule, nResID,
szType) :
ro.ResourceUnregister(pszModule, nResID, szType);
}
HRESULT WINAPI CExeModule::UpdateRegistryFromResourceS(LPCTSTR
lpszRes,
BOOL bRegister, struct _ATL_REGMAP_ENTRY* pMapEntries)
{
USES_CONVERSION;
CRegObject ro;
TCHAR szModule[_MAX_PATH];
GetModuleFileName(_Module.GetModuleInstance(), szModule,
_MAX_PATH);
TCHAR szModuleShort[_MAX_PATH];
// Convert to short file name.
if (::GetShortPathName(szModule, szModuleShort, _MAX_PATH))
{
lstrcpy(szModule, szModuleShort);
}
LPOLESTR pszModule = T2OLE(szModule);
ro.AddReplacement(OLESTR("Module"), pszModule);
if (NULL != pMapEntries)
{
while (NULL != pMapEntries->szKey)
{
_ASSERTE(NULL != pMapEntries->szData);
ro.AddReplacement(pMapEntries->szKey, pMapEntries->szData);
pMapEntries++;
}
}
LPCOLESTR szType = OLESTR("REGISTRY");
LPCOLESTR pszRes = T2COLE(lpszRes);
return (bRegister) ? ro.ResourceRegisterSz(pszModule, pszRes,
szType)
: ro.ResourceUnregisterSz(pszModule, pszRes, szType);
}
#else
ATLAPI MyAtlModuleUpdateRegistryFromResourceD(_ATL_MODULE* pM,
LPCOLESTR lpszRes, BOOL bRegister,
struct _ATL_REGMAP_ENTRY* pMapEntries, IRegistrar* pReg = NULL)
{
USES_CONVERSION;
_ASSERTE(pM != NULL);
HRESULT hRes = S_OK;
CComPtr<IRegistrar> p;
if (pReg != NULL)
p = pReg;
else
{
hRes = CoCreateInstance(CLSID_Registrar, NULL,
CLSCTX_INPROC_SERVER, IID_IRegistrar, (void**)&p);
}
if (SUCCEEDED(hRes))
{
TCHAR szModule[_MAX_PATH];
GetModuleFileName(pM->m_hInst, szModule, _MAX_PATH);
TCHAR szModuleShort[_MAX_PATH];
// Convert to short file name.
if (::GetShortPathName(szModule, szModuleShort, _MAX_PATH))
{
lstrcpy(szModule, szModuleShort);
}
p->AddReplacement(OLESTR("Module"), T2OLE(szModule));
if (NULL != pMapEntries)
{
while (NULL != pMapEntries->szKey)
{
_ASSERTE(NULL != pMapEntries->szData);
p->AddReplacement((LPOLESTR)pMapEntries->szKey,
(LPOLESTR)pMapEntries->szData);
pMapEntries++;
}
}
LPCOLESTR szType = OLESTR("REGISTRY");
GetModuleFileName(pM->m_hInstResource, szModule, _MAX_PATH);
LPOLESTR pszModule = T2OLE(szModule);
if (HIWORD(lpszRes)==0)
{
if (bRegister)
hRes = p->ResourceRegister(pszModule,
((UINT)LOWORD((DWORD)lpszRes)), szType);
else
hRes = p->ResourceUnregister(pszModule,
((UINT)LOWORD((DWORD)lpszRes)), szType);
}
else
{
if (bRegister)
hRes = p->ResourceRegisterSz(pszModule, lpszRes, szType);
else
hRes = p->ResourceUnregisterSz(pszModule, lpszRes,
szType);
}
}
return hRes;
}
HRESULT WINAPI CExeModule::UpdateRegistryFromResourceD(LPCTSTR
lpszRes,
BOOL bRegister, struct _ATL_REGMAP_ENTRY* pMapEntries)
{
USES_CONVERSION;
return MyAtlModuleUpdateRegistryFromResourceD(this,
T2COLE(lpszRes),
bRegister, pMapEntries);
}
HRESULT WINAPI CExeModule::UpdateRegistryFromResourceD(UINT nResID,
BOOL bRegister, struct _ATL_REGMAP_ENTRY* pMapEntries)
{
return MyAtlModuleUpdateRegistryFromResourceD(this,
(LPCOLESTR)MAKEINTRESOURCE(nResID), bRegister, pMapEntries);
}
#endif
Additional query words: 80080005 -2146959355 LFN atl registration server execution failed CO_E_SERVER_EXEC_FAILURE
Keywords: kbbug kbfix kbregistry kbvc600fix kbserver kbatl300fix kblocalsvr KB179690