2010-03-18 87 views
0

我正在開發使用2個庫的軟件。 這兩個庫都使用VS2005,都需要VS2005 redist包。 但是,他們的redist軟件包版本不同。 所以,我有幾個關於安裝redists的問題。Microsoft可再發行組件包

1)我可以在沒有問題的情況下安裝新版本嗎? 2)如果我安裝這兩個redist,Windows如何知道哪個庫正在使用哪個redist?

感謝

回答

3

從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上有關並排端緩存以及如何使用清單文件信息。

相關問題