我的自定义注册表项及其值在哪里?

时间:2014-04-23 04:38:46

标签: registry installscript installshield-2012

我是IntallShield的新手,并扩展了一个相当大的InstallScript项目,以便在首次安装时添加新的自定义注册表项(HKEY_LOCAL_MACHINE\SOFTWARE\Company\Product\Foo)和有关功能的值。

根据项目的现有代码添加其他自定义注册表项和值,我添加了一个专用函数,在适当的情况下调用RegDBCreateKeyExRegDBSetKeyValueEx ...

function BOOL RegisterFooFeature(szBar, szBaz)
    string szValue;
    number nType, nSize;
begin
    RegDBSetDefaultRoot(gnProductRegRootKey); // gnProductRegRootKey = HKEY_LOCAL_MACHINE

    //
    // registry subkey
    //
    if (RegDBKeyExist(gszFooFeatureRegSubkey) < 0) then // gszFooFeatureRegSubkey = "SOFTWARE\\Company\\Product\\Foo"
        if (RegDBCreateKeyEx(gszFooFeatureRegSubkey, gszProductRegClass) < 0) then
            My_AddToLog("RegisterFooFeature:  Unable to create registry key " + gszFooFeatureRegSubkey + ".");

            return FALSE;
        else
            My_AddToLog("RegisterFooFeature:  Created registry key " + gszFooFeatureRegSubkey + ".");
        endif;
    else
        My_AddToLog("RegisterFooFeature:  Found existing registry key " + gszFooFeatureRegSubkey + ".");
    endif;

    //
    // registry values
    //
    nType = REGDB_STRING;
    nSize = -1;

    if (RegDBSetKeyValueEx(gszFooFeatureRegSubkey, gszBarRegValueName, nType, szBar, nSize) < 0) then
        My_AddToLog("RegisterFooFeature:  Unable to set registry value \"" + gszFooFeatureRegSubkey + "\\" + gszBarRegValueName + "\" to \"" + szBar + "\".");

        return FALSE;
    else
        My_AddToLog("RegisterFooFeature:  Set registry value \"" + gszFooFeatureRegSubkey + "\\" + gszBarRegValueName + "\" to \"" + szBar + "\".");
    endif;

    if (RegDBSetKeyValueEx(gszFooFeatureRegSubkey, gszBazRegValueName, nType, szBaz, nSize) < 0) then
        My_AddToLog("RegisterFooFeature:  Unable to set registry value \"" + gszFooFeatureRegSubkey + "\\" + gszBazRegValueName + "\" to \"" + szBaz + "\".");

        return FALSE;
    else
        My_AddToLog("RegisterFooFeature:  Set registry value \"" + gszFooFeatureRegSubkey + "\\" + gszBazRegValueName + "\" to \"" + szBaz + "\".");
    endif;

    return TRUE;
end;

...并在OnFirstUIBefore中添加了对它的调用。

我通过记录确认OnFirstUIBefore在第一次安装时执行,就像我期望的那样;并且我的日志记录表明创建了新的自定义注册表项(HKEY_LOCAL_MACHINE\SOFTWARE\Company\Product\Foo)及其值;但我没有在注册表中看到新的自定义键及其值,就像我在首次安装后执行现有的自定义键和值一样。

我的新自定义注册表项在哪里?

1 个答案:

答案 0 :(得分:0)

事实证明,在OnFirstUIBefore调用RegisterFooFeature之前,它调用了一个已删除REGDB_OPTION_WOW64_64KEY的预先存在的函数...并且在它返回之前没有恢复它。

我在64位注册表配置单元中寻找新密钥及其值,但由于预先存在的函数的副作用,它们位于SOFTWARE\Wow6432Node下的32位注册表配置单元中。 / p>