我是 IntallShield 的新手,并扩展了一个相当大的 InstallScript 项目以添加新的自定义注册表项 ( HKEY_LOCAL_MACHINE\SOFTWARE\Company\Product\Foo
) 和有关首次安装功能的值。
基于项目的现有代码添加其他自定义注册表项和值,我添加了一个专用函数,用于调用RegDBCreateKeyEx
并RegDBSetKeyValueEx
在适当的情况下......
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
创建了新的自定义注册表项 ( ) 及其值;但我没有在注册表中看到新的自定义键及其值,就像我在第一次安装后看到现有的自定义键和值一样。
我的新自定义注册表项在哪里?