我使用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 x86和x64),创建一个设置并包含相应的合并模块(microsoft_vc90_crt_x86_x64.msm),安装所有VC ++可再发行软件包等。无论安装什么,它都会失败。
如果我检查相关文件并且它们正确位于WinSxS文件夹中,但如果我在文件上运行Dependency Walker,它也会抱怨无法找到VC9 CRT中的文件。
如果我为32位构建文件,它将在32位操作系统上正确注册。我的想法已经不多了,所以非常感谢任何帮助。
谢谢,
阿德里安。
编辑 *这只能在Win XP 64上重现,在Windows 7 64位上都能正常运行。
答案 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可再发行组件包括策略文件,而合并模块则不需要单独添加。