使用Wix安装程序执行升级时Web.config自定义丢失

使用Wix安装程序执行升级时Web.config自定义丢失,wix,windows-installer,wix3.5,Wix,Windows Installer,Wix3.5,我创建了一个WiX安装程序,用于在客户站点上部署一组网站,并使用xmlfile将主机名和连接字符串的正确值插入web.config文件。由于这些值来自安装程序UI,因此我在使用以下方法进行升级安装时遇到了问题: msiexec /i Websites.msi /l*vx Website.log REINSTALL=ALL REINSTALLMODE=vomus 更新正确执行时,xmlfile操作会插入空值,因为UI未运行 有没有一种方法可以在不解析XML或再次提示安装工程师输入值的情况下将这

我创建了一个WiX安装程序,用于在客户站点上部署一组网站,并使用xmlfile将主机名和连接字符串的正确值插入web.config文件。由于这些值来自安装程序UI,因此我在使用以下方法进行升级安装时遇到了问题:

msiexec /i Websites.msi  /l*vx Website.log REINSTALL=ALL REINSTALLMODE=vomus
更新正确执行时,xmlfile操作会插入空值,因为UI未运行

有没有一种方法可以在不解析XML或再次提示安装工程师输入值的情况下将这些值输入到安装程序中

干杯,
Damien

如果您只希望在安装过程中修改web.config,则可以将包含XmlFile元素的组件设置为
未安装
状态。在这种情况下,在升级过程中,这些组件将不会运行修改XML文件的操作

您需要仅适用于XML而不是Regisry的模式。WiX还没有XML peek模式,因此您必须编写一个自定义操作


另一个需要注意的问题是,由于您正在修改XML,未来的升级默认情况下不会安装更新版本的XML,因为它现在有用户数据

不幸的是,我们需要更新web.config,并将提供给安装程序的原始值插回ConnectionString。我有一种不好的感觉,我必须编写某种类型的连接字符串解析器作为自定义操作,或者以某种方式强制更新以弹出配置屏幕。这可能不适合IIS/ASP.NET(这里没有什么新内容),但如果将XML拆分为2个XML,安装会容易得多。基本上,一个用户不修改的文件,安装程序可以反复安全地替换,另一个用户/应用程序/安装程序修改的XML文件,其中包含您的变化点。基本上考虑stock.xml和override/transform.xml。我本来希望永远不必写一个定制动作,但却无法回避。我把一个(相当脏的)C#dll放在一起,从任何当前的web.config和web.constants.config文件中读取所需的值,并将它们存储为现有的WiX变量。不太理想,我必须关注开发团队的工作,但这已经足够了。