WiX默认REFERENCED值或注册表值

时间:2015-07-14 00:10:00

标签: wix

我需要为我的应用程序设置默认数据库文件。我只想在初始安装时设置它。如果注册表值(sdf文件路径的字符串)发生更改,则将来的升级不应尝试将该值设置回默认值。

另一个需要注意的问题是,如果他们从未设置过数据库文件,那么用户应该能够将该程序与默认数据库一起使用而无需进行设置。 / p>

所以我将DATABASEFILE设置为值=" [INSTALLFOLDER] dust.sdf"。但蜡烛抱怨[安装者]:

The 'DATABASEFILE' Property contains '[INSTALLFOLDER]' in its value which is an illegal reference to another property.  If this value is a string literal, not a property reference, please ignore this warning.  To set a property with the value of another property, use a CustomAction with Property and Value attributes.

因此,根据错误的说明,我添加了自定义操作。现在该自定义操作总是覆盖DATABASEFILE属性。如果注册表中没有值,我希望它只覆盖该值。

以下是代码:

<CustomAction Id='SetINSTALLFOLDERREF' Property='DATABASEFILE' Value='[INSTALLFOLDER]dust.sdf' Execute='immediate' />

<Property Id='DATABASEFILE' >
  <RegistrySearch Id='DatabaseFile' Type='raw' Root='HKCU' Key='Software\DBG\Dust\Database' Name='File'/>
</Property>

1 个答案:

答案 0 :(得分:0)

您是否使用Id = SetINSTALLFOLDERREF为自定义操作设置了条件? 如果没有,你可能想要这样做。

自定义操作上的NOT DATABASEFILE条件应该足够了。

根据上述条件,

- 如果是全新安装,则注册表项不存在。因此,DATABASEFILE为NULL,自定义操作条件的计算结果为true,自定义操作SetINSTALLFOLDERREF执行。

- 对于任何后续维护操作,存在注册表项,属性DATABASEFILE将始终包含值,自定义操作条件将变为FALSE,并且不会触发自定义操作。

您可能想要做的另一件事是将属性DATABASEFILE添加到SecureCustomProperties列表中,即。确保财产DATABASEFILE。

希望这有帮助。

此致 Kiran Hegde