首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Wix包删除大部分升级期间的所有文件

Wix包删除大部分升级期间的所有文件
EN

Stack Overflow用户
提问于 2022-01-12 00:57:01
回答 1查看 112关注 0票数 0

我是wix的新手,以前,我试图解决重大升级更新所有配置文件的问题。我设法通过在RemoveExistingProduct之后修改installExecute来修复它。但是,它给我带来了一个新的问题,我用当前项目生成的包之间的主要升级很好,但是有一个旧的msi包(有相同的升级代码),当我用那个旧包进行主要升级时,它会删除所有的东西,只有在我修复后才能重新显示文件。在日志中

代码语言:javascript
运行
复制
1: msvcp140_2.dll 2:  3:  4:  5:  6:  7:  8:  9: C:\Folders\ 
MSI (s) (5C:04) [18:29:11:453]: Verifying accessibility of file: msvcp140_2.dll
MSI (s) (5C:04) [18:29:11:453]: Note: 1: 2318 2:  
MSI (s) (5C:04) [18:29:11:453]: Note: 1: 2318 2:  
MSI (s) (5C:04) [18:29:11:454]: Executing op: FileRemove(,FileName=msvcp140_codecvt_ids.dll,,)

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2022-01-12 20:47:24

我能给你的最好的建议是MSI想拥有它安装的文件,而忽略它不安装的文件。

因此,如果MSI安装了一个文件v1,并且用户对它进行了修改,那么当稍后的MSI安装文件v2时,如果它覆盖它或不覆盖它,那么它将是错误的。

您可以编写自定义操作,从文件中获取用户数据,并在MSI覆盖文件后重新应用这些操作,但这会变得乏味。

我的一般建议是将应用程序设计成有两个配置文件。

app.config (由MSI安装,用户不修改) app-override.config (未由MSI安装,用户数据存储在这里)

然后,应用程序读取并合并内存中的两个文件。这样,MSI就可以安全地覆盖文件,而不会造成任何伤害,用户数据不会丢失,来自v2的新数据也不会丢失。

通过这种方式,这一切都非常简单和简单,您可以将您的RemoveExistingProducts调度设置回到最初的位置。

如果这是一个.NET应用程序,那么.NET ConfigurationManager类已经支持这种模式。AppSettings元素有一个File属性,它可以指向要合并的第二个文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70675164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档