2013-05-10 39 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