2010-03-18 97 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上有关并排端缓存以及如何使用清单文件信息。

相关问题