gpt4 book ai didi

c# - 使用 WiX 和 C# 管理依赖 hell

转载 作者:行者123 更新时间:2023-11-30 12:18:15 25 4
gpt4 key购买 nike

我们正处于产品发布前夕,在最后一刻,我收到了似乎与我们的安装程序有关的崩溃报告的轰炸,这是一个 WiX3 项目,具有 x86 和 x64 构建的单独输出。这些一直是一个持续存在的问题,我一直认为已解决,却发现它们仍然潜伏着。

该产品本身是一组二进制文件,它们通过 .Net 远程处理相互通信,包括一个 Windows 服务和一个作为插件加载到另一个应用程序中的小型 COM 组件。该服务以 SYSTEM 身份运行,COM 部分在低权限上下文中运行,而其他部分在普通用户上下文中运行。其他部分包括第三方 COM 对象库 DLL 和带有 .net Remoting 接口(interface)的共享 DLL。

我观察到 MSI 的异常行为,特别是在版本升级时。在 MS 的肛门强名称实现之间(具体来说,加载给定程序集之前的确切版本检查), 一个记录在案的 WiX/MSI 错误,该错误会在升级时删除关键文件(本质上,如果升级 MSI 中的文件具有与现有安装相同的版本号,该文件被删除) (编辑:在生成所述文档时遇到问题......),并且必须解决 Wow64 虚拟化(x86 MSI 只能通过 Wow64 写入注册表/HD 位置,但 x64 MSI 无法在 x86 计算机上运行...),我准备丢弃整个东西并将其移植到不同的安装系统。

我正在寻找关于如何正确做事的提示 + 技巧、技术或建议,这样我就不会与 Windows Installer 扭曲的逻辑感作斗争。我厌倦了与WiX/MSI/Windows 安装程序。它需要做的就是将文件和注册表项放在我告诉它的地方,在适当的时候升级它们,并且在用户卸载之前不要删除任何东西。相反,依赖项会被随意删除,从而引发一大堆无法捕获的异常(无法将 try{} block 包裹在函数声明周围)并且对整个应用进行 GPF。

我对有关共享和依赖 DLL 的“最佳实践”和示例以及确保如果文件需要转到 GAC 的任何提示特别感兴趣,它确实转到 提交给 GAC 并留在那里,直到适合将其删除。

谢谢!

汤姆

最佳答案

开始阅读 The Definitive Guide to Windows Installer .

完成了吗?伟大的。现在考虑放弃您现有的安装,从头开始并为您当前必须在安装中“解决”的所有内容提交应用程序错误。几乎每一位您一直与之抗争的“扭曲逻辑”都是为了一个目的,让您的安装更加可靠和可修复。

如果您不想要 Windows Installer 的可靠性和弹性,或者如果您试图以任何方式绕过它,那么请使用其他工具。 Windows Installer 所做的远不止是“将文件和注册表项放在我指定的位置”。

当您编写 MSI 程序包时,您可以定义目标系统的外观。这就是它在安装后的样子,如果文件被删除或关键数据文件损坏,它应该自动修复的方式。您定义如果用户稍后在从 1.0 升级到 2.0 期间取消,系统应如何回滚。 Windows Installer 100% 数据驱动。从开发的角度来看,这是最难理解的概念,您不能只编辑配置文件或写入更多数据并期望它持久存在。一旦您了解了这一点,Windows Installer 就会变得非常简单,您可以设计您的程序和功能以在它的限制内工作,而不是试图摆脱它们:)

一些其他有用的链接...

关于c# - 使用 WiX 和 C# 管理依赖 hell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2580489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com