强制升级在其初始安装过程中修改的文件

问题描述 投票:12回答:3

我正在为基于WiX的安装程序开发升级功能。

作为安装的一部分,我们正在安装web.config文件,然后使用自定义操作来更新文件内部的连接字符串。

但是这会在我们运行升级时引起问题。我们希望在InstallFinalize之后安排RemoveExistingProducts,因为这在不删除和重新安装未更改的文件方面是最有效的。但是,在Windows Installer尝试确定是否应该更新它时,原始的web.config文件保留在原位。由于上次修改日期早于其创建日期,因此Windows Installer决定不对其进行更新(请参阅Windows Installer使用的versioning rules)。但是我们需要对其进行更新。

一种明显的解决方案是将RemoveExistingProducts的调度更改为InstallValidate之后的调度-但这效率低下,而且,如果我们需要这样做,我认为这不会给我们提供从现有文件迁移设置的机会。] >

还有其他想法吗?

我正在为基于WiX的安装程序开发升级功能。作为安装的一部分,我们将安装一个web.config文件,然后使用自定义操作来更新......>

wix windows-installer installer upgrade
3个回答
16
投票
1:您可以使用

伴侣文件


1
投票

不使用自定义操作来更新您的配置文件是另一个显而易见的想法。而是让WIX通过XML扩展名进行更新。例如:

<Component Id="web.config" Guid="f12ff575-ad5f-47bc-a5c9-40b1e3a7f9f5" > <File Source="$(var.SrcPath)\web.config.config" KeyPath="yes" /> <util:XmlConfig Id="AppSqlInstanceName" File="[#web.config]" Action="create" ElementPath="//configuration/connectionStrings/add[\[]@name='YourStringKey'[\]]" Name="connectionString" Node="value" Value="metadata=res://*/YourModel.csdl|res://*/YourModel.ssdl|res://*/YourModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=[SQLSERVERANDINSTANCE];initial catalog=DatabaseName;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" On="install"/> </Component>
这使用[SQLSERVERANDINSTANCE]变量,需要先进行设置。

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.