我在Visual Studio中有一个安装项目。作为常规安装的一部分,它会在Windows注册表中创建/更新某些键和值。我怎样才能使更新可逆?VS安装项目;如何在卸载时恢复注册表值?
你可能会说“他们是可逆的”,但我不这么认为。以下是我认为它的工作原理:使用VS设计器来指定您想要的注册表项和值。这些键和值在安装过程中写入,在卸载过程中被删除。简单。什么是不可逆的?
当安装过程中写入的某个键中存在某个值时,会出现问题。假设它的值为1.然后在新安装时,它的值为100.卸载后,它根本没有任何价值 - 价值已经消失。
我试着用“自定义操作”来解决这个问题。
安装期间,如果用户确认,msiexec将值写入注册表。无论在注册表键之前,都不见了。 (我们称之为“更新A”)
要保留该值,在安装时,会有一个自定义操作读取并保留“before”设置。它在“更新A”之前运行。到现在为止还挺好。
在卸载时,正常的操作过程是删除安装期间添加的常规注册表项和值。这工作得很好。称这个“更新B”。
要还原原始注册表值,我有另一个“自定义操作”。这个在卸载时运行。它成功地将原始值恢复到注册表中。注册表看起来就像在最初的安装之前一样。我验证了这可以使用ProcMon(一种让我监视注册表更新等的工具)。调用这个“更新C”。
只有一个问题。在卸载时,更新B正在发生更新C.这意味着,在自定义操作恢复原始注册表设置后,msi会清除还原的值,就像它处理所有其他注册表更新一样。
结果是注册表具有空值而不是恢复的值。
任何帮助?我如何重新排列更新?我需要Orca吗?我真的不想安装和学习另一种工具来实现这一点。我也希望它是自动的。绝对不想通过一个MSI编辑器直观地点击来实现这一点。
我可以通过使用WindowsInstaller.Installer类的Javascript后期构建事件来做到这一点吗? Aaron Stebner published a script添加了“安装后启动应用程序?”对话框到由Visual Studio生成的MSI。 Windows Installer支持“启动应用程序”功能,但未在VS2008/2005的设计人员中公开。在启动对话框中添加一个快速生成器脚本,作为VS中的后期构建步骤运行。
与自定义操作的排序可能类似吗?