代码之家  ›  专栏  ›  技术社区  ›  Adrian Fâciu

VC++CRT Redist问题

  •  2
  • Adrian Fâciu  · 技术社区  · 15 年前

    我用C++和VisualStudio 2008开发了一个64位的DLL,我试图用ReGVR32.exe在目标机器上注册它。我已经检查了清单文件,它清楚地说明了需要什么版本的CRT:

     <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='amd64' publicKeyToken='1fc8b3b9a1e18e3b' />
    

    当我尝试注册文件时,总是会收到一条并排的错误消息,说明应用程序设置不正确,我应该重新安装它。

    日志错误:生成激活上下文 失败。。。参考错误消息:The 未安装引用的程序集 在你的系统上。

    目标计算机运行64位Windows XP Professional。我尝试安装相应的VC++可再发行软件包(VC++2008 Redist x86 x64 ,创建安装程序并包含相应的合并模块(Microsoft_VC90_CRT_x86_x64.msm),安装所有VC++可再发行软件包等。无论安装了什么,它都将始终失败。

    如果我检查依赖文件,并且它们正确地位于winsxs文件夹中,但是如果我对该文件运行依赖性walker,它也会抱怨找不到VC9 CRT中的文件。

    如果我构建32位的文件,它将在32位操作系统上正确注册。我没有主意了,所以任何帮助都非常感谢。

    谢谢,

    阿德里安。

    编辑 *这只能在Win XP 64上复制,在Windows 7 64位上都可以正常工作。

    4 回复  |  直到 14 年前
        1
  •  1
  •   C.J.    15 年前

    我不擅长安装程序,但您是否考虑过将可再发行软件分发到应用程序的根文件夹中?

    至于我,我从来没有听说过用regsvr32.exe安装crt redist。

        2
  •  1
  •   AndersK    15 年前
    <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' ...
    

    不应该是

    <assemblyIdentity type='win64' name='Microsoft.VC90.CRT' ...
    

    ?

    您需要64位运行时

        3
  •  1
  •   jdehaan    15 年前

    尽管应用程序是64位的,但它似乎在寻找32位CRT DLL。您是否尝试安装32位可再发行软件包?

    下面是一个关于如何跟踪边侧故障的很好的描述: http://blogs.msdn.com/b/junfeng/archive/2006/04/14/576314.aspx

        4
  •  1
  •   Adrian Fâciu    14 年前

    最后,我成功地通过将一个新版本的C++可重新分配的合并模块安装到安装程序中,以及所有需要的策略合并模块来修复这个问题,以便将调用重定向到任何可用的旧版本。

    这里最重要的是,可再发行的exe包含策略文件,而合并模块不包含,因此需要单独添加它们。