- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正处于产品发布前夕,在最后一刻,我收到了似乎与我们的安装程序有关的崩溃报告的轰炸,这是一个 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/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!