2010-09-27 126 views
2

我使用C++和Visual Studio 2008开发了一个64位的dll和我想要将其注册使用“regsvr32.exe的”在目标机器上。我检查清单文件,它明确指出需要什么版本的CRT的:VC++ CRT的Redist问题

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

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

Log Error: Generate Activation Context failed... Reference error message: The referenced assembly is not installed on your system.

目标机器运行Windows XP专业版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位正常工作。

+1

这应该工作,记录您的问题更好。复制并粘贴* exact *事件日志消息,记录正在使用的* exact * merge模块。 – 2010-09-27 13:51:04

回答

1

在我已经包括C++重新分发合并模块的新版本进入设置沿设法解决这个月底全部为了必要的政策合并模块来呼叫重定向到任何旧版本到新的一个可用。

这里最重要的是exe文件可再发行组件包括政策文件和合并模块不那么需要对它们进行单独添加。

1

我在安装专家,但你有没有想过分发可再发行的在应用程序的根文件夹?

至于我,我从来没有听说过使用regsvr32.exe的安装CRT REDIST年代。

+0

嗨,在这种情况下在相同的文件夹中部署redis不适用,我没有使用regsvr32来安装它们,我使用它来注册我的dll,因为它是一个COM组件。 – 2010-09-27 12:53:25

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

它不应该是

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

您需要64位运行时

+0

这是有道理的,但清单是由VS产生的,我认为它应该知道在做什么。我会尝试改变它,看看它是如何工作的。 – 2010-09-27 12:59:42

1

听起来尽管应用程序是64位是在寻找32位的DLL CRT。你尝试安装32位可再发行组件包吗?

这里是如何跟踪SideBySide失败一个很好的说明: http://blogs.msdn.com/b/junfeng/archive/2006/04/14/576314.aspx

+0

是的,我已经安装了这两个版本的可重新发布的软件包,但没有变化,感谢我在看它的链接。 – 2010-09-27 12:57:09