Windows-7/64bit注册免费COM对象
问题描述:
我试图让微软的Registration-Free Activation of COM Components: A Walkthrough示例在Windows 7 Professional/64bit机器上运行。我已经下载了演示程序MSDNRegFreeCOM.msi。Windows-7/64bit注册免费COM对象
我使用VS2008SP1在XP-32开发箱上正确构建和运行。但是,当我复制工作32位演示程序到我的Windows 7机器,它失败了一个0x80040154错误。此错误表示该类未注册。但是,没有明确地向windows注册这个对象就是这个特定COM对象的要点,所以请不要告诉我用Windows注册这个对象。
有没有人知道有什么特别的事情必须用Windows 7完成?
编辑 每克里斯蒂安·亚当下面的评论,我一直在使用一个外部清单文件(client.exe.manifest)。但是,当我复制示例中的一个时,它不适用于我。代码是 -
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
type = "win32"
name = "client"
version = "1.0.0.0" />
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="SideBySide"
version="1.0.0.0" />
</dependentAssembly>
</dependency>
</assembly>
答
Windows 7先读取内部清单文件,然后再读取外部清单。 Windows XP的反其道而行之。
http://blogs.msdn.com/b/junfeng/archive/2009/05/11/internal-manifest-vs-external-manifest.aspx
合并的外部清单到内部清单可以通过运行来完成(在“Visual Studio 2008的命令提示符”窗口):
mt.exe -nologo -manifest client.exe.manifest -updateresource:"client.exe;#1"
这是事实,但如果我不不包括外部清单,它应该仍然读取内部清单并加载com对象,就像在我的XP开发盒上一样。 – 2010-08-25 13:46:58
刚刚在Windows 7上尝试了“基于COM的组件的无注册激活\ deployment \ client.exe”,它工作正常。 Client.exe没有任何内部清单,只有外部清单。 – 2010-08-25 13:59:31
很棒。不过,我仍然在client.exe.manifest文件中丢失了一些非常简单的东西。我已经从示例中复制了文件内容,但仍无法加载。你可以上传你的吗? – 2010-08-25 14:15:25