Installscript MSI Installshield 安装程序无法在 32 位 Windows 注册表位置设置注册表

问题描述

我使用的是 InstallShield 2020 R3 SP1,我在 Installscript MSI 项目中创建了一个安装程序。

此安装程序已成功在 64 位 Windows 注册表项位置(即“HKEY_LOCAL_MACHINE\SOFTWARE\SungardePI”)添加\设置注册表项,但无法在 32 位 Windows 注册表位置(即“HKEY_LOCAL_MACHINE\SOFTWARE\”)下添加\设置注册表项WOW6432Node\SungardePI"

我的组件设置为 64 位,安装程序认将注册表项设置为 64 位位置。我还编写了 installscript 代码来在 32 位位置设置注册表项,但它不起作用。

谁能帮助我了解如何通过安装脚本代码在 32 位位置设置注册表项?

下面的当前安装脚本代码 -

注意 - 首先,我调用了 SetRegistrykey() 函数,它认更新 64 位注册表位置中的节点,然后我在 if 语句下添加代码并再次调用 SetRegistrykey() 函数以执行相同的更改在 32 位注册表位置下,但它不会更新任何注册表节点,而是仅覆盖 64 位位置中的更改。

我也尝试更换REGDB_OPTIONS=REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY;REGDB_OPTIONS=REGDB_OPTIONS | REGDB_OPTION_USE_DEFAULT_OPTIONS;但没有成功。

通常,Installshield 安装程序认更新 32 位 Windows 注册表位置,但在我的情况下,它正在更新\设置 64 位 Windows 注册表位置中的值,我无法弄清楚原因。

function SetRegistryKeys()

STRING szSrcFile,szTargetFile,szPath,szFileName,szFileNameSave;
STRING szLine;
STRING szKeyName,szName;
NUMBER nResult,nFileHandle,rc;
OBJECT oEncrypt;
STRING szProgID,szKeyData;
begin
WriteLogAsInfo(TRUE,TRUE,"SetRegistryKeys","Setting Keys in Registry.");

//Write some registry values
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);

//For ConfigPath key
szKeyName = "Software\\" + @REG_COMPANY_NAME + "\\" + @REG_PRODUCT_NAME + "\\" + @REG_APP_ROOT_KEY + "\\Common";

szName = "CONfigPATH";
szKeyData = TARGETDIR + "Configuration Files\\";
if(RegDBSetkeyvalueEx (szKeyName,szName,REGDB_STRING,szKeyData,-1) <0) then goto Reg_Error;endif;

WriteLogAsInfo(FALSE,"Setting Keys in Registry.");

return 0;

Reg_Error:
WriteLogAsError(FALSE,"","Error: Unable to write properties to registry.");
MessageBox("Error: Unable to write properties to registry.",SEVERE);
abort;

return -1;

end;

#Code 在 32 位位置更新注册表项。

if(SYSINFO.bIsWow64) then
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);

REGDB_OPTIONS=REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY;
SetAppServerObjectsRegistry();
SetRegistryKeys();

//Set the encryption key in the registry
SetEncryptionCommonKeyRegistry();
endif;

解决方法

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

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

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