可以为创建的注册表项添加默认值,但不允许在修复时重置该值(没有自定义CA代码)?

时间:2014-02-26 17:49:41

标签: windows-installer installshield

我正在尝试为创建的注册表项 EDIT:(HKLM)添加默认值,但不允许在修复时重置该值,理想情况下无需编写任何代码(我认为这是Windows Installer在其工具集中可以拥有的东西)

到目前为止,这是我的解决方案:

  1. 添加了负责添加(或删除)注册表项的组件。这方面的“数据”只是属性[MYPROPERTY]

  2. 的名称
  3. 添加了一个名为MYPROPERTY的属性,表中的值为1。可以通过命令行中的安装用户将其更改为0。

  4. 我为条件SetProperty添加了MYPROPERTY CA,以便它只在第一次安装时运行,而不是在修复等项目上运行。

  5. 我认为问题是我对Property表中的MYPROPERTY值进行了1的硬编码。显然,修复会将其重置为1. 我的问题是,是否有另一种方法来查看此问题。否则,我相信我必须编写自定义CA来缓存原始值,然后在修复后恢复它。我想我正试图找出使用本机Windows Installer而不是代码的方法。

3 个答案:

答案 0 :(得分:1)

是的,可以设置一个值,然后保留它。您可以通过为安装密钥的组件设置空白GUID来执行此操作,但我不喜欢此解决方案。

我会更新你的应用程序,在第一次启动时自己编写默认密钥。然后,应用程序可以根据需要更新密钥 - 前提是密钥存储在HKCU中,以便密钥可写。

通常所有HKCU数据都应该由application.exe写入。 HKLM数据应由设置书写并保持最低限度。

答案 1 :(得分:1)

最简单的方法是在安装程序启动时使用MSI注册表搜索搜索属性,无论是全新安装还是修复。然后该属性将被对话框覆盖,或保留已在注册表中的值,因此修复将重写正确的值。我认为没有理由在Property表中有一个默认值。

答案 2 :(得分:0)

这是我做的,如果这很有用:

  1. 创建了一个属性,其值是注册表设置的默认值
  2. 创建一个AppSearch以在注册表中查找该值并将其存储在单独的属性中
  3. 创建一个SetProperty CA以获取由上面的AppSearch设置的属性值,并将其值分配给在步骤1中创建的属性。然后,应用“仅修复”条件,例如REINSTALL~="ALL" < / LI>

    这样,如果用户将值更改为默认值以外的值,则会恢复