从32位应用程序中读取应用程序的32位和64位版本的注册表项

问题描述

我找到了与此主题相关的一些答案,但是找不到满足我需要的答案。因此,请帮助我解决以下问题。

我正在运行32位Windows应用程序。应用程序代码的一部分旨在从注册表中读取另一个软件应用程序的语言(语言环境)(在我们的讨论中,请将该另一个软件应用程序命名为“ OtherApplication”)。 “ OtherApplication”可以是32位版本或64位版本。此C ++代码如下所示:

char* DetermineLanguage(Bitness bitness)
{
    std::string keyNameStr;
    if(bitness == k64Bit)
        keyNameStr = _T("SOFTWARE\\CompanyName\\OtherApplication\\");
    else
        keyNameStr = _T("SOFTWARE\\WOW6432Node\\CompanyName\\OtherApplication\\");

    TCHAR language[MAX_PATH];
    DWORD len,type = 0;
    HKEY key = NULL;

    if ((RegOpenKeyEx(HKEY_LOCAL_MACHINE,keyNameStr.c_str(),KEY_QUERY_VALUE,&key) == ERROR_SUCCESS)
        && (RegQueryValueEx(key,_T("Language"),NULL,&type,(BYTE*)language,&len) == ERROR_SUCCESS))
    {
        RegCloseKey(key);
        key = NULL;
        return language;
    }
    else
        return NULL;
}

我不确定,但是我的理解是上述代码存在一些问题。首先,我不应该基于位数创建keyName。相反,我应该使用其他一些注册表API,这些API会根据“ OtherApplication”的位数自动进行重定向重定向到Wow6432Node或其他方式)。在这种情况下,该位数信息将需要传递到该注册表API。我还意识到我需要使用标志KEY_WOW64_64KEY / KEY_WOW64_32KEY,因为我正在运行的代码应用程序是32位应用程序。

其次,我也不知道这段代码是否可以在没有Wow6432Node的32位操作系统上正常工作。

我在寻找什么:- 我希望对上述问题的理解得到验证。另外,由于我无法完善收集的所有信息来编写正确的代码,因此我在这里寻求一些帮助/指导以最佳方式编写此代码。哪种注册表API最适合我的目的?谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)