アプリケーションのインストールパスの取得方法
アプリケーションをインストールするとHKEY_LOCAL_MACHINEのSoftware\\Microsoft\\Windows\\CurrentVersion\\Uninstall
に情報が書き込まれるのでそれを利用してアプリケーションのインストールパスを取得する。
下記のコードはGoogle Earthの場合。
参考:
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_SDKReg.html
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200209/02090022.txt
HKEY hkResult, hkResultEnum; LONG lResult; CString strUninstallKey = _T("Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"); BOOL bFoundGoogleEarth = FALSE; TCHAR enumName[MAX_PATH]; DWORD dwNameSize = MAX_PATH; FILETIME ft; CString strValue; DWORD dwType; DWORD dwSize; lResult = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, strUninstallKey, 0, KEY_ALL_ACCESS, &hkResult); if (lResult == ERROR_SUCCESS) { for (DWORD enumCount = 0;; ++enumCount) { dwNameSize = MAX_PATH; lResult = ::RegEnumKeyEx(hkResult, enumCount, enumName, &dwNameSize, NULL, NULL, NULL, &ft); if (lResult == ERROR_NO_MORE_ITEMS) { break; } ASSERT(lResult == ERROR_SUCCESS); if (lResult != ERROR_SUCCESS) { continue; } lResult = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, strUninstallKey + _T("\\") + enumName, 0, KEY_ALL_ACCESS, &hkResultEnum); ASSERT(lResult == ERROR_SUCCESS); if (lResult != ERROR_SUCCESS) { continue; } lResult = ::RegQueryValueEx(hkResultEnum, _T("DisplayName"), NULL, &dwType, NULL, &dwSize); if (lResult == ERROR_SUCCESS) { lResult = ::RegQueryValueEx(hkResultEnum, _T("DisplayName"), NULL, &dwType, (LPBYTE)strValue.GetBuffer(dwSize), &dwSize); strValue.ReleaseBuffer(); ASSERT(lResult == ERROR_SUCCESS); if (strValue == _T("Google Earth")) { lResult = ::RegQueryValueEx(hkResultEnum, _T("InstallLocation"), NULL, &dwType, NULL, &dwSize); ASSERT(lResult == ERROR_SUCCESS); lResult = ::RegQueryValueEx(hkResultEnum, _T("InstallLocation"), NULL, &dwType, (LPBYTE)strValue.GetBuffer(dwSize), &dwSize); strValue.ReleaseBuffer(); ASSERT(lResult == ERROR_SUCCESS); bFoundGoogleEarth = TRUE; } } if (hkResultEnum) { ::RegCloseKey(hkResultEnum); hkResultEnum = 0; } if (bFoundGoogleEarth) { break; } } if (hkResult) { ::RegCloseKey(hkResult); hkResult = 0; } } if (bFoundGoogleEarth) { ::AfxMessageBox(strValue); }