WiX默认引用值或注册表值



我需要为我的应用程序设置一个默认数据库文件。我只想在初始安装时设置它。如果注册表值——sdf文件路径的字符串——发生了变化,那么以后的升级不应该尝试将该值设置回默认值。

另一个警告,这似乎是一个问题,虽然,如果他们从来没有设置数据库文件,用户应该能够使用一个默认数据库的程序,而不必经过设置。

所以我用value="[INSTALLFOLDER]dust.sdf"设置DATABASEFILE。但是candle在抱怨[INSTALLFOLDER]:

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='SoftwareDBGDustDatabase' Name='File'/>
</Property>

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

在你的自定义操作上设置一个NOT DATABASEFILE的条件应该就足够了。

对于上述条件,

—在新安装的情况下,注册表项不存在。因此,DATABASEFILE为NULL,自定义操作条件求值为true,并执行自定义操作SetINSTALLFOLDERREF。

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

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

最新更新