我正在为基于WiX的安装程序开发升级功能。
作为安装的一部分,我们正在安装web.config文件,然后使用自定义操作来更新文件内部的连接字符串。
但是这会在我们运行升级时引起问题。我们希望在InstallFinalize之后安排RemoveExistingProducts,因为这在不删除和重新安装未更改的文件方面是最有效的。但是,在Windows Installer尝试确定是否应该更新它时,原始的web.config文件保留在原位。由于上次修改日期早于其创建日期,因此Windows Installer决定不对其进行更新(请参阅Windows Installer使用的versioning rules)。但是我们需要对其进行更新。
一种明显的解决方案是将RemoveExistingProducts的调度更改为InstallValidate之后的调度-但这效率低下,而且,如果我们需要这样做,我认为这不会给我们提供从现有文件迁移设置的机会。] >
还有其他想法吗?
我正在为基于WiX的安装程序开发升级功能。作为安装的一部分,我们将安装一个web.config文件,然后使用自定义操作来更新......>
伴侣文件
不使用自定义操作来更新您的配置文件是另一个显而易见的想法。而是让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="data source=[SQLSERVERANDINSTANCE];initial catalog=DatabaseName;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""
On="install"/>
</Component>