【发布时间】:2016-01-12 12:34:44
【问题描述】:
我正在使用 Wix 3.10 构建一个安装程序,它将安装文件、创建服务以及创建和填充数据库。
我正在使用 Wix sql:SqlDatabase 元素创建数据库并在安装期间运行一些 sql 脚本来填充它(主要基于 WIX database deployment, installation)
按照 Wix 文档中的建议,我正在测试一个模拟升级,然后再发布初始安装程序。据我所知,强烈建议坚持重大升级,因此我按照示例使用MajorUpgrade 元素。
不幸的是,在重大升级期间,我似乎无法阻止 Wix 卸载数据库,也找不到任何有关如何处理此问题的指导。我知道重大升级实际上是卸载当前版本,然后重新安装新版本,但肯定有办法保留原始版本的一部分吗?
我安装的服务也有类似的问题,但基于这个 SO 问题Wix Major Upgrade: how do I prevent Windows service reinstallation?,解决方案似乎是在安装序列的删除服务条目中添加一个条件:
<InstallExecuteSequence>
<DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices>
</InstallExecuteSequence>
这暗示对我来说,可以在重大升级中保留条目,但我可能会误解。
不幸的是,SqlDatabase 实体似乎没有任何等效的 installexecute 序列元素。有没有关于如何处理这个问题的指导?
更新
根据PhilDW的回答,更改主要升级的顺序或时间表是通过更改Schedule属性来完成的:
<MajorUpgrade
DowngradeErrorMessage="A newer version of [ProductName] is already installed."
Schedule="afterInstallExecute"/>
注意但是,这只会带您到此为止 - 如果您计划在安装程序中添加对可信身份验证和 SQL 身份验证的支持(根据上面的 SO 文章),它将不起作用,我的假设是 Wix 确定从未安装过一个组件(未选择任何身份验证选项),因此将始终删除数据库。
【问题讨论】:
标签: wix installation