VC ++ CRT Redist问题

时间:2010-09-27 12:38:53

标签: c++ visual-studio-2008

我使用C ++和Visual Studio 2008开发了一个64位的dll,我正在尝试使用'regsvr32.exe'在目标机器上注册它。我检查了清单文件,它清楚地说明了需要什么版本的CRT:

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

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

  

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

目标计算机运行Windows Xp Professional 64位。我已经尝试安装相应的VC ++可再发行组件包(VC ++ 2008 Redist x86x64),创建一个设置并包含相应的合并模块(microsoft_vc90_crt_x86_x64.msm),安装所有VC ++可再发行软件包等。无论安装什么,它都会失败。

如果我检查相关文件并且它们正确位于WinSxS文件夹中,但如果我在文件上运行Dependency Walker,它也会抱怨无法找到VC9 CRT中的文件。

如果我为32位构建文件,它将在32位操作系统上正确注册。我的想法已经不多了,所以非常感谢任何帮助。

谢谢,

阿德里安。

编辑 *这只能在Win XP 64上重现,在Windows 7 64位上都能正常运行。

4 个答案:

答案 0 :(得分:1)

我不是安装程序方面的专家,但您是否考虑过将可再发行组件分发到应用程序的根文件夹中?

至于我,我从未听说过使用regsvr32.exe安装crt redist的。

答案 1 :(得分:1)

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

不应该是

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

您需要64位运行时

答案 2 :(得分:1)

听起来好像应用程序是64位,它正在寻找32位crt dll。您是否尝试安装32位可再发行软件包?

以下是有关如何追踪SideBySide失败的详细说明: http://blogs.msdn.com/b/junfeng/archive/2006/04/14/576314.aspx

答案 3 :(得分:1)

最后,我设法通过在设置中包含更新版本的C ++可再发行合并模块以及所有必需的策略合并模块来解决此问题,以便将对旧版本的调用重定向到可用的新版本

最重要的是exe可再发行组件包括策略文件,而合并模块则不需要单独添加。