我使用Wix框架创建了安装程序。安装程序(使用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会运行并给我错误:
“系统无法找到指定的注册表项或值。”
问题是安装程序在“Admin”上下文中运行,因此不知道如何找到HKCU位于注册表中的哪个位置。
有没有人知道我是如何在HKCU下找到一个帐户(然后是正确的注册表),当我处于“管理”环境时?
我想要尝试的下一个策略是获取当前用户的SID,然后通过搜索HKEY_USERS访问它们的注册表......但这证明是困难的。
使用注册表搜索和条件。 http://wix.sourceforge.net/manual-wix3/read_a_registry_entry.htm – Gilad 2013-02-17 21:57:03
如果我们确切地知道要查找哪些键值,这将工作,但对于此应用程序,注册表键值是非确定性的并取决于事物像用户名等 – stackunderflow 2013-02-18 17:53:02