0

我是 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创建了新的自定义注册表项 ( ) 及其值;但我没有在注册表中看到新的自定义键及其值,就像我在第一次安装后看到现有的自定义键和值一样。

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

4

1 回答 1

0

原来,在OnFirstUIBefore调用RegisterFooFeature它之前调用了一个预先存在的函数,该函数删除了REGDB_OPTION_WOW64_64KEY......并且在它返回之前没有恢复它。

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

于 2014-05-12T04:19:45.383 回答