2010-08-25 92 views
4

我试图让微软的Registration-Free Activation of COM Components: A Walkthrough示例在Windows 7 Professional/64bit机器上运行。我已经下载了演示程序MSDNRegFreeCOM.msiWindows-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> 

回答

4

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"

+0

这是事实,但如果我不不包括外部清单,它应该仍然读取内部清单并加载com对象,就像在我的XP开发盒上一样。 – 2010-08-25 13:46:58

+0

刚刚在Windows 7上尝试了“基于COM的组件的无注册激活\ deployment \ client.exe”,它工作正常。 Client.exe没有任何内部清单,只有外部清单。 – 2010-08-25 13:59:31

+0

很棒。不过,我仍然在client.exe.manifest文件中丢失了一些非常简单的东西。我已经从示例中复制了文件内容,但仍无法加载。你可以上传你的吗? – 2010-08-25 14:15:25