网站建设 郑州网站建设 网站制作 网页设计 网站设计 郑州建网站 - 爱易在线

网站地图 | 网站Tags标签 | RSS订阅 | 加入收藏
您的位置:网站首页 > 博客笔记 > 正文 博客笔记相关信息

C#免注册调用COM+(ActiveX)组件

作者:郑州网站建设 2014/9/27 15:20:56 点击: 来源:

   COM对象的传统创建方法,会依赖于注册表,所有应用程序都会依赖到同一个版本的COM。如果不同程序依赖的COM版本不同,而这个COM的版本兼容又没有做得很好的时候,就会出现DLL Hell问题。

   微软在多年前就提供了一个Reg-free COM的方案,现在的VS也很好的集成了这个功能。

   免注册COM的实现原理是把依赖到的COM类型与接口信息存储在本地的清单文件(.manifest)中,由它来代替注册表的角色,来指定COM文件路径、COM版本等信息。使用免注册COM不仅可以摆脱注册表的依赖,还可以精确的指定使用的COM版本、或者随安装包分发一个版本匹配的COM文件,指定只从本地目录读取,从而避免DLL Hell问题。


传统COM的创建过程:





免注册COM的创建过程:




生成免注册COM:

  用Visual Studio.NET 2010,生成免注册程序轻而易举,然而,开发时却必须要先注册COM+控件。这多少有点讽刺,尽管可以无须注册COM控件来运行一个程序,但在开发免注册程序的电脑上,却必须要先注册COM组件,所以目前来说,免注册COM仅限于运行时。


在VS中使用的步骤是:

1、在解决方案浏览器中,打开引用文件夹,当添加COM+(ActiveX)控件到程序窗体时(工具箱-右击-选择项目-COM+)

2、把控件拖到窗体,会自动完成引用

3、点击选中引用的控件,在属性面板,把“独立”设置为:true 如下图:




然后vs会自动创建 *.manifest 清单文件,并把COM+组件自动复制到bin/debug目录。

只需要这三部就完成了COM+(ActiveX)的免注册调用。



生成的清单文件:



清单文件内容:

<?xml version="1.0" encoding="utf-8"?>
<assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2">
  <assemblyIdentity name="APlayer Test.exe" version="1.0.0.0" processorArchitecture="x86" type="win32" />
  <file name="APlayer_3.8.0.698.dll" asmv2:size="1710464">
    <hash xmlns="urn:schemas-microsoft-com:asm.v2">
      <dsig:Transforms>
        <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
      </dsig:Transforms>
      <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
      <dsig:DigestValue>Ia8f86x7kMXAvkg40ZPgNBYhsvw=</dsig:DigestValue>
    </hash>
    <typelib tlbid="{97830570-35fe-4195-83de-30e79b718713}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
    <comClass clsid="{a9332148-c691-4b9d-91fc-b9c461dbe9dd}" threadingModel="Apartment" tlbid="{97830570-35fe-4195-83de-30e79b718713}" progid="APlayer3.Player.1" description="APlayer3 Control" />
  </file>
  <file name="APlayerUI_1.5.0.24.dll" asmv2:size="395648">
    <hash xmlns="urn:schemas-microsoft-com:asm.v2">
      <dsig:Transforms>
        <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
      </dsig:Transforms>
      <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
      <dsig:DigestValue>t5LteJw/pNIkVEmhcqqT4PokVH8=</dsig:DigestValue>
    </hash>
    <typelib tlbid="{a9757030-96f6-485e-a8ab-5b5137462472}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
    <comClass clsid="{23a860e9-0c41-4e01-9206-d3fc0e413645}" threadingModel="Apartment" tlbid="{a9757030-96f6-485e-a8ab-5b5137462472}" progid="APlayerUI.Player.1" description="APlayerUI Class" />
  </file>
</assembly>




   有了创建后的清单文件,只需简单地复制release目录(可用COPY)到任何电脑上,就可以在没有注册表项的情况下使用该控件,现在,发布一个程序简单得就如复制粘贴一般简单了。


引用:http://blog.csdn.net/HarbinZJU/article/details/7888362

     http://blog.csdn.net/xieqidong/article/details/2471999  


分享到:

上一篇:IIS 7.5 配置伪静态 urlrewriter.dll

下一篇:C#线程同步之生产者消费者经典练习

博客笔记推荐阅读

用户评论

最新博文

热门排行

推荐信息

关于爱之易| 付款方式| 联系我们| 网站地图| 网站Tags标签 | RSS订阅