我使用Wix框架创建了一个安装程序。
用户第一次安装软件后,他们可以自定义功能,然后在下次运行程序时保存在注册表中。
这是我遇到的问题:
用户的设置被我的程序保存在注册表中。当用户卸载程序时,他们的设置仍然保存在注册表中(同样,他们应该这样做)。但是,当用户去安装较新版本的软件时,注册表值会被删除。
如何防止注册表值在安装时被删除?
编辑:
我现在正在尝试运行自定义操作脚本来复制和恢复注册表。这是我的脚本代码:
<CustomAction Id="SaveCmd" Directory="TempFolder" ExeCommand="[SystemFolder]ccbackup.bat" Execute="deferred" Impersonate="no" />
<CustomAction Id="RestoreCmd" Directory="TempFolder" ExeCommand="[SystemFolder]REG.exe RESTORE HKCU\Software\Company\Program[TempFolder]BkUp.hiv" Execute="deferred" Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="SaveCmd" After="InstallInitialize" />
<Custom Action="RestoreCmd" Before="InstallFinalize" />
</InstallExecuteSequence>
SaveCmd 自定义操作运行如下所示的脚本 (ccbackup.bat),以便我可以获得一些调试信息:
REG.exe SAVE HKCU\Software\Company\Program BkUp.hiv /Y
pause
脚本 ccbackup.bat 将运行并给我错误:
“系统找不到指定的注册表项或值。”
问题是安装程序在“管理员”上下文中运行,因此它不知道如何找到 HKCU 在注册表中的位置。
有谁知道当我处于“管理员”上下文时如何在 HKCU 下找到一个帐户(然后是正确的注册表)?
我要尝试的下一个策略是获取当前用户的 SID,然后通过搜索 HKEY_USERS 来访问他们的注册表......但是事实证明这很困难。