2013-05-10 32 views
1

我正在用WiX构建MSI安装程序以重新分发我的MinGW64应用程序。这需要将MinGW dll与可执行文件一起发送。WiX安装程序和从MinGW重新分发libstdC++ 6.dll

libstdc6.dll文件没有版本化。什么是最干净的方法呢?

我曾尝试:

  1. 添加一个伴侣文件到DLL组件,指着主应用程序exe文件,这是versionned。然而,维克斯抱怨,我不能一个同伴设置为一个dll
  2. 把DLL的主应用程序EXE组件,但并不鼓励这样在每一个WiX的常见问题解答,HOWTO和论坛...
  3. 添加属性DefaultVersion="!(bind.FileVersion.mainapp.exe)"到DLL用于覆盖(缺少)dll版本的文件元素。这乍看起来工作,但威克斯是发布与此相关的警告:

C:\用户\艾蒂安\文档\编码\海洋\ ocean.wxs(116):警告 LGHT1103:本对于没有版本的文件“libstdc6.dll”,使用了DefaultVersion'!(bind.FileVersion.mainapp.exe)' 。此文件 的条目将被放置在MsiFileHash表中。对于未版本控制的文件,指定与实际文件不同的版本的 可能导致 在修复期间或修补期间发生意外版本控制行为。 版本资源以消除此警告。

解决此问题的最佳方法是什么?

感谢,

艾蒂安

回答

2

恕我直言,你最好的选择#2。所有规则都假定可执行代码将被正确版本化,因此最好作为其各自组件的KeyPath部署。由于.dll没有版本化,因此将其作为数据文件与版本化文件一起使用是次佳选择。

尽管为了记录,对.dll进行版本控制是迄今为止最理想的解决方案。 :)

+0

谢谢! 完全同意,但我不会重新编译libstdC++只是为了添加版本...我试图找到一个手工添加到dll的工具,但似乎没有人能够修改64位gcc二进制文件(不同的格式?) – galinette 2013-07-10 13:05:47