當我的文件集包含具有對C++運行時DLL的一個或多個依賴項的DLL時,我需要從VCRedist.exe安裝該文件。這可能很困難,因爲每個DLL都依賴於特定版本的C++運行時。使用WiX自動安裝運行時庫
如何將運行時可重新分配自動添加到我的安裝程序?
如何在WinSxS中處理需要不同版本C++運行時的DLL?
當我的文件集包含具有對C++運行時DLL的一個或多個依賴項的DLL時,我需要從VCRedist.exe安裝該文件。這可能很困難,因爲每個DLL都依賴於特定版本的C++運行時。使用WiX自動安裝運行時庫
如何將運行時可重新分配自動添加到我的安裝程序?
如何在WinSxS中處理需要不同版本C++運行時的DLL?
heat和Votive都不支持所請求的功能。運行時DLL必須手動添加。
您可以簡單地確保安裝最新的vcredist,它會自動包含對舊版本的支持。
我認爲最簡單的方法是使用bootstrapper在運行安裝程序之前安裝運行時。您可能需要創建自己的包,但爲此,使用Bootstrapper Manifest Generator很容易。
在product.xml您可以添加安裝檢查,以確保它沒有安裝兩次,例如:
<InstallChecks>
<MsiProductCheck Property="VCRedistInstalled" Product="{1F1C2DFC-2D24-3E06-BCB8-725134ADF989}"/>
</InstallChecks>
其他的GUID見here。
您需要安裝庫所需的最新版本(最高版本)以及將舊版本重定向到新版本的策略文件。
您可以使用Visual Studio安裝的合併模塊執行這兩個操作。他們通常位於C:\Program Files\Common Files\Merge Modules
。請參閱MergeRef
元素和示例how to install Visual C++ redistributable with your installer。您還需要將策略合併模塊添加到您的安裝中。
有沒有'熱'或Votive支持檢測到這一點?我應該在檢測後管理.wxs文件,但最好創建一個片段將不勝感激。 – harper 2011-05-17 08:38:09
引導程序不是wix的一部分,因此您無法使用此功能。請參閱例如'C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bootstrapper \ Packages \ *'或'C:\ Program Files(x86)\ Microsoft Visual Studio 8 \ SDK \ v2.0 \ BootStrapper \ Packages \ *'爲現有文件。使用BMG創建這樣的文件。 – wimh 2011-05-17 09:57:21
我不需要一個引導程序。在WiX.CHM部分的「如何:使用安裝程序安裝Visual C++可再發行組件」中,您可以找到如何包含合併模塊。這是WiX的一部分,我尋求一種方法來讓這個更方便,更不容易出錯。 – harper 2011-05-17 14:03:05