代码之家  ›  专栏  ›  技术社区  ›  jmatthias

私有非托管并行程序集问题

  •  3
  • jmatthias  · 技术社区  · 15 年前

    我们有一个使用多个dll的大型MFC应用程序。到目前为止,我们一直在使用vcredit_x86.exe将MFC和CRT安装到非托管并排程序集缓存(C:\ Windows\WinSxS)中。以这种方式安装MFC/CRT时,应用程序运行(在干净的XP机器上)。

    根据MSDN文档,可以通过将程序集文件复制到安装应用程序的文件夹中来安装MFC/CRT。我已经用一个简单的MFC应用程序测试过了,它可以工作。但是我在使用这种方法让我们的大型MFC应用程序工作时遇到了问题。

    该问题似乎是由于某些DLL具有引用早期版本CRT的清单(例如,一个DLL包含以下清单)引起的。

    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <dependency>
    <dependentAssembly>
    <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50215.4652" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b" /> 
    </dependentAssembly>
    </dependency>
    </assembly>
    

    在使用私有并排程序集时,加载程序加载程序集较新版本的功能似乎不起作用,但在将程序集安装到WinSxS中时,它确实起作用。

    有解决办法吗?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Community CDub    8 年前

    我认为答案归结于CRT发行商的政策。看看例如。 c:\windows\winsxs\Manifests\x86_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_f47e1bd6f6571810.manifest

    要在不安装vcredit的情况下执行此重定向,需要做的是更改清单,或编写 libraryX.dll.config libraryX.dll.2.config )重定向绑定。

    post 例如配置。注意你不需要 <publisherPolicy apply="no"/> ;应应用发布者策略来关闭安全漏洞。

    推荐文章