WinApi:RegQueryValueEx 返回应用程序的文件名

问题描述 投票:0回答:1

我在以下代码中遇到问题: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。

c++ windows winapi registry
1个回答
0
投票

我做错的事:

使用

(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;
 }     
© www.soinside.com 2019 - 2024. All rights reserved.