我正在開發使用2個庫的軟件。 這兩個庫都使用VS2005,都需要VS2005 redist包。 但是,他們的redist軟件包版本不同。 所以,我有幾個關於安裝redists的問題。Microsoft可再發行組件包
1)我可以在沒有問題的情況下安裝新版本嗎? 2)如果我安裝這兩個redist,Windows如何知道哪個庫正在使用哪個redist?
感謝
我正在開發使用2個庫的軟件。 這兩個庫都使用VS2005,都需要VS2005 redist包。 但是,他們的redist軟件包版本不同。 所以,我有幾個關於安裝redists的問題。Microsoft可再發行組件包
1)我可以在沒有問題的情況下安裝新版本嗎? 2)如果我安裝這兩個redist,Windows如何知道哪個庫正在使用哪個redist?
感謝
從XP開始,被(或可以)安裝在Windows並排端緩存DLL的(事實上,VS2005 DLL的堅持在並排側高速緩存中找到;否則他們拒絕運行)。
在Windows並行緩存中(您可以在C:\ WINDOWS \ WINSxS中找到)將DLL放在子文件夾中,由名稱和版本標識。這樣,DLL的多個版本可以並排安裝。
如果編譯Visual Studio應用程序,編譯器會告訴鏈接器它應該生成一個清單文件。然後可以使用MT命令將該清單文件鏈接到可執行文件或DLL中。
此清單文件包含與前面所述相同的版本號,Windows將使用此信息來定位加載可執行文件或DLL時加載的DLL。
在你的問題中,你所使用的2個庫是DLL還是LIB是不清楚的。 如果它們是DLL,則使用上述系統,您可能沒有問題。 您仍然可以嘗試安裝新版本,但是如果Windows抱怨安裝舊版本也是安全的。
但是,如果您使用LIB,您可能會遇到麻煩。沒有辦法指出每個LIB使用的DLL。您的可執行文件只能引用一個DLL(實際上是DLL的一個版本),而不是兩個。
在這種情況下你可以做的是檢查並排緩存中的策略。你可以在C:\ WINDOWS \ WINSxS \ Policies中找到它)。每個組件都會有一個子文件夾,文件夾中將是策略文件。策略文件可以指定重定向,因此如果您的應用程序需要版本X,策略可以包含也允許版本Y的信息。
這是一個政策文件的這樣一個例子:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright © 1981-2001 Microsoft Corporation -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32-policy" name="policy.8.0.Microsoft.VC80.ATL" version="8.0.50727.4053" processorArchitecture="amd64 " publicKeyToken="1fc8b3b9a1e18e3b"/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.ATL" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b" />
<bindingRedirect oldVersion="8.0.41204.256-8.0.50608.0" newVersion="8.0.50727.4053"/>
<bindingRedirect oldVersion="8.0.50727.42-8.0.50727.4053" newVersion="8.0.50727.4053"/>
</dependentAssembly>
</dependency>
</assembly>
有關詳細信息,查找MSDN上有關並排端緩存以及如何使用清單文件信息。