BOOL CWinApp::Unregister() { HKEY hKey = 0; TCHAR szBuf[MAX_PATH+1]; LONG cSize; BOOL bRet = TRUE; POSITION pos = GetFirstDocTemplatePosition(); while (pos != NULL) { CDocTemplate* pTempl = GetNextDocTemplate(pos); if (pTempl != NULL) pTempl->OnCmdMsg(0, CN_OLE_UNREGISTER, NULL, NULL); } // Remove profile information -- the registry entries exist if // SetRegistryKey() was used. if (m_pszRegistryKey) { ASSERT(m_pszProfileName); CString strKey = _T("Software\\"); strKey += m_pszRegistryKey; CString strSubKey = strKey + _T("\\") + m_pszProfileName; DelRegTree(HKEY_CURRENT_USER, strSubKey); // If registry key is empty then remove it DWORD dwResult; if ((dwResult = ::RegOpenKey(HKEY_CURRENT_USER, strKey, &hKey)) == ERROR_SUCCESS) { if (::RegEnumKey(hKey, 0, szBuf, _MAX_PATH) == ERROR_NO_MORE_ITEMS) DelRegTree(HKEY_CURRENT_USER, strKey); ::RegCloseKey(hKey); } if (RegQueryValue(HKEY_CURRENT_USER, strSubKey, szBuf, &cSize) == ERROR_SUCCESS) bRet = TRUE; } return bRet; }