我需要为我的应用程序设置默认数据库文件。我只想在初始安装时设置它。如果注册表值(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>
答案 0 :(得分:0)
您是否使用Id = SetINSTALLFOLDERREF为自定义操作设置了条件? 如果没有,你可能想要这样做。
自定义操作上的NOT DATABASEFILE条件应该足够了。
根据上述条件,
- 如果是全新安装,则注册表项不存在。因此,DATABASEFILE为NULL,自定义操作条件的计算结果为true,自定义操作SetINSTALLFOLDERREF执行。
- 对于任何后续维护操作,存在注册表项,属性DATABASEFILE将始终包含值,自定义操作条件将变为FALSE,并且不会触发自定义操作。
您可能想要做的另一件事是将属性DATABASEFILE添加到SecureCustomProperties列表中,即。确保财产DATABASEFILE。
希望这有帮助。
此致 Kiran Hegde