我在以下代码中遇到问题:RegQueryValueEx() 返回程序名称“WindowsSetup.exe”。
TCHAR uninstallPath[MAX_PATH];
DWORD dwSize = MAX_PATH;
DWORD dwType = REG_SZ;
HKEY edge;
if (!RegOpenKeyW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Microsoft Edge", &edge)) {
if (!RegQueryValueEx(edge, L"UninstallString", 0, &dwType, (BYTE*)&uninstallPath, &dwSize)) { ReportError(); return; }
}
else {
ReportError();
return;
}
MessageBox(0, uninstallPath, 0, 0);
MessageBox() 显示“WindowsSetup.exe”。
有人知道如何解决这个问题吗?我正在尝试从注册的应用程序中获取 MSEdge UninstallString。
我做错的事:
使用
(BYTE*)&uninstallPath
代替 (BYTE*)uninstallPath
dwSize
应设置为 sizeof(uninstallPath)
而不是 MAX_PATH
。
正确的代码是:
TCHAR uninstallPath[MAX_PATH];
DWORD dwSize = sizeof(uninstallPath);
DWORD dwType = REG_SZ;
HKEY edge;
if (RegOpenKeyW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Microsoft Edge", &edge)==ERROR_SUCCESS) {
if (RegQueryValueEx(edge, L"UninstallString", 0, &dwType, (BYTE*)uninstallPath, &dwSize)!=ERROR_SUCCESS) { ReportError(); return; }
}
else {
ReportError();
return;
}