关于创建regedit密钥的MFC,在本地机器上工作,但在其他机器或操作系统不起作用

时间:2014-01-12 14:44:05

标签: mfc regedit

我在HKEY_LOCAL_MACHINE SOFTWARE \ Company \ Company \中创建名为“Language”的regedit键,在visual studio调试模式下将创建,但我通过Install shield构建它,并将其安装在其他机器和操作系统中(Windows 7窗口8) ),密钥无法通过应用程序创建。

当安装盾牌的步骤时,我创建了SOFTWARE \ Company \ Company \的Regedit密钥, 但我无法在此代码中更改语言的密钥

SetMainRegeditValue(theApp.mMainRegKey, theApp.mMainRegNormal[0], theApp.g_eLanguage);

这段代码会发生什么?

// In the global 
CRegKey mMainRegKey;
CString *mMainRegPath;
CString *mMainRegNormal;

....

theApp.mMainRegPath = new CString[1];
theApp.mMainRegPath[0] = _T("SOFTWARE\\Company\\Company\\");

theApp.mMainRegNormal = new CString[1];
theApp.mMainRegNormal[0] = _T("Language");

// Check Regedit value
if(theApp.mMainRegKey.Open(HKEY_LOCAL_MACHINE, theApp.mMainRegPath[0]) == ERROR_SUCCESS)
{
    TCHAR  tstrLan[_MAX_PATH];

    DWORD len = _MAX_PATH;
    DWORD lanlen = 8;
    if(theApp.mMainRegKey.QueryStringValue(_T("Version"),tstrLan, &lanlen) != ERROR_SUCCESS)
    {
        RegDeleteKey(HKEY_LOCAL_MACHINE, theApp.mMainRegPath[0]);
        RegDeleteKey(HKEY_LOCAL_MACHINE, theApp.mMainRegNormal[0]);

        SetMainRegeditValue(theApp.mMainRegKey,_T("Version"), _T("v2.0.0"));
    }
}

if(theApp.mMainRegKey.Open(HKEY_LOCAL_MACHINE,theApp.mMainRegPath[0]) != ERROR_SUCCESS)     
{
    theApp.mMainRegKey.Create(HKEY_LOCAL_MACHINE, theApp.mMainRegPath[0]);
    SetMainRegeditValue(theApp.mMainRegKey, theApp.mMainRegNormal[0], theApp.g_eLanguage);
}

1 个答案:

答案 0 :(得分:0)

好的,我找到了规则。 需要管理员权限才能将任何内容写入HKEY_LOCAL_MACHINE, 但HKEY_CURRENT_USER不是必需的,所以将HKEY_LOCAL_MACHINE替换为HKEY_CURRENT_USER, 这个问题就解决了。