一、使用regasm.exe将DLL提取出TLB文件

regasm.exe "Tools.HMIBrowserDetector.dll" /tlb

二、使用wix的heat.exe程序

用法如下:

heat file <*.dll> -out <*.wxs>

其中<*.dll>是你用c#编写的activex的dll文件名,<*.wxs>是你要输出的wxs文件名。

heat.exe "Tools.HMIBrowserDetector.dll" -out "Tools.HMIBrowserDetector.dll.wix"
heat.exe "Tools.HMIBrowserDetector.tlb" -out "Tools.HMIBrowserDetector.tlb.wix"

文件生成OK后,打开<*.WXS>文件

1.将其中的<DirectoryRef Id="*">修改成你的目录名,比如<DirectoryRef Id="INSTALLDIR">

2.将<Component Id="*" Guid="PUT-GUID-HERE">中的PUT-GUID-HERE换成你的ACTVIEX的GUID,比如[Guid("3C719C70-EBB6-46A4-B9C5-6A926BDC004C")]的3C719C70-EBB6-46A4-B9C5-6A926BDC004C

最终效果:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="INSTALLDIR">
<Component Id="cmp2655A93590AF35557BE69214C9637225" Guid="3C719C70-EBB6-46A4-B9C5-6A926BDC004C">
<Class Id="{3C719C70-EBB6-46A4-B9C5-6A926BDC004C}" Context="InprocServer32" Description="xxxxx.Tools.HMIBrowserDetector.BrowserDetector" ThreadingModel="both" ForeignServer="mscoree.dll">
<ProgId Id="HMIBrowser.Detector" Description="xxxxx.Tools.HMIBrowserDetector.BrowserDetector" />
</Class>
<File Id="fil21B157A69D41BF1742AD629A14C5609E" KeyPath="yes" Source="SourceDir\Build\xxxxx.Tools.HMIBrowserDetector.dll" />
<RegistryValue Root="HKCR" Key="CLSID\{3C719C70-EBB6-46A4-B9C5-6A926BDC004C}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{3C719C70-EBB6-46A4-B9C5-6A926BDC004C}\InprocServer32\2.0.2015.1016" Name="Class" Value="xxxxx.Tools.HMIBrowserDetector.BrowserDetector" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{3C719C70-EBB6-46A4-B9C5-6A926BDC004C}\InprocServer32\2.0.2015.1016" Name="Assembly" Value="xxxxx.Tools.HMIBrowserDetector, Version=2.0.2015.1016, Culture=neutral, PublicKeyToken=366fc8dc0356ba75" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{3C719C70-EBB6-46A4-B9C5-6A926BDC004C}\InprocServer32\2.0.2015.1016" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{3C719C70-EBB6-46A4-B9C5-6A926BDC004C}\InprocServer32\2.0.2015.1016" Name="CodeBase" Value="file:///[#fil21B157A69D41BF1742AD629A14C5609E]" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{3C719C70-EBB6-46A4-B9C5-6A926BDC004C}\InprocServer32" Name="Class" Value="xxxxx.Tools.HMIBrowserDetector.BrowserDetector" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{3C719C70-EBB6-46A4-B9C5-6A926BDC004C}\InprocServer32" Name="Assembly" Value="xxxxx.Tools.HMIBrowserDetector, Version=2.0.2015.1016, Culture=neutral, PublicKeyToken=366fc8dc0356ba75" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{3C719C70-EBB6-46A4-B9C5-6A926BDC004C}\InprocServer32" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{3C719C70-EBB6-46A4-B9C5-6A926BDC004C}\InprocServer32" Name="CodeBase" Value="file:///[#fil21B157A69D41BF1742AD629A14C5609E]" Type="string" Action="write" />
</Component>
</DirectoryRef>
</Fragment>
</Wix>

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="INSTALLDIR">
<Component Id="cmp71D7A8BD2249AE8FF1BAF63380EBE202" Guid="3C719C70-EBB6-46A4-B9C5-6A926BDC004C">
<File Id="fil4917A9C7209D8355FE869F3A043C0103" KeyPath="yes" Source="$(var.SourceFilesDir)\Tools.HMIBrowserDetector.tlb">
<TypeLib Id="{1CC3C945-DAFF-4E73-A9D3-849540BBA501}" Description="Tools_HMIBrowserDetector" HelpDirectory="dirB3F37FBA6922AB1B836A1A26AE0C3C1E" Language="0" MajorVersion="2" MinorVersion="0">
<Interface Id="{E455B333-58E2-3D50-9E32-2962A5FC9324}" Name="_BrowserDetector" ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
</TypeLib>
</File>
</Component>
</DirectoryRef>
</Fragment>
</Wix>

3.保存文件,放到WXI安装工程中去

4.修改文件清单wxs,将上面两个ComponentId加入进去,这样文件就会拷贝过去了

Wix中注册c#开发的Activex控件的更多相关文章

  1. Qt开发Activex笔记(二):Qt调用Qt开发的Activex控件

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113789693 长期持续带来更多项目与技术分享 ...

  2. 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件

    “/”应用程序中的服务器错误. 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“c552ea94-6fbb-11d5-a9c1-00104bb6fc1c”. 说明: 执行当前 Web ...

  3. 针对Windows 64位系统中Matlab没有LED Control Activex控件的解决方法

    Win 10 64bits系统中Matlab 64位软件没有LED Control Activex控件,LED ActiveX Control控件位于Gauges Blockset模块中,而Gauge ...

  4. Qtp中一个或多个ActiveX控件无法显示问题

    今天在使用qtp进行登陆测试的时候,发现了一个问题,现总结归纳如下: [问题] 在测试过程中,一直提醒:一个或多个ActiveX控件无法显示,原因可能是下列其中之一: 如下图所示: [解决办法] 在Q ...

  5. 【VS开发】ActiveX控件如何定制属性?

    在很多场合下会存在这样的需求,那就是使用方在实际使用控件之前就想控件已经做了相应的处理比如加载的控件版本不正确等,或者需要在加载时才确定能够使用的功能集:这个时候传统的配置文件已经无法满足这种类型的需 ...

  6. Delphi不注册COM直接使用ActiveX控件并绑定事件

    文笔不行,直接上源码: 主窗口: unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System ...

  7. Current thread must be set to single thread apartment (STA) mode before OLE,当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”。

    Add the STAThreadAttribute attribute on the Main method. This attribute is required if your program ...

  8. 【VS开发】windows注册ActiveX控件

    ActiveX控件是一个动态链接库,是作为基于COM服务器进行操作的,并且可以嵌入在包容器宿主应用程序中,ActiveX控件的前身就是OLE控件.由于ActiveX控件与开发平台无关,因此,在一种编程 ...

  9. 用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件

    用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件用C#编写ActiveX控件 开发浏览器控件这是本控件开发完成后的一个简单应用.我们可以利用它以本地文件夹为单位来批量更新服务器的 ...

随机推荐

  1. 深入理解C语言的函数调用过程 【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-4240084.html 原文地址:深入理解C语言的函数调用过程 作者:wjlkoorey258     本文 ...

  2. 内存对齐与ANSI C中struct型数据的内存布局 【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-3032209.html 当在C中定义了一个结构类型时,它的大小是否等于各字段(field)大小之和?编译器将 ...

  3. shell脚本练习【转】

    1.写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin):分别这两类用户的个数:通过字符串比较来实现: #脚本内容 [root@ce ...

  4. redis,nodejs,php,pub/sub 实战: 微信语音识别

    2015年5月22日 20:20:20 星期五 效果: 这边对微信说话,  浏览器端及时显示语音识别的文字 注意: 在连接socket.io时, 按下浏览器f12, 如果一直有请求不断的刷, 说明so ...

  5. Python_oldboy_自动化运维之路_面向对象(十)

    面向对象编程 OOP编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向 ...

  6. SqlServer 批量备份

    -- 实现方式1:使用游标 DECLARE @FileName VARCHAR(200), @CurrentTime VARCHAR(50), @DBName VARCHAR(100), @SQL V ...

  7. DDD领域模型企业级系统(三)

    相关代码: public static void ShowArray() { //数据源 int[] arrayas = new int[] { 1, 2, 3, 4 }; //创建查询 var qu ...

  8. Java编程的逻辑 (16) - 继承的细节

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  9. norbert-构建服务器集群感知的 Java 应用程序

    http://www.ibm.com/developerworks/cn/java/j-zookeeper/index.html

  10. 戏说 Spring MVC 框架

    Spring MVC 是 Spring 框架的一部分,和 Struts 一样都是属于 web 层框架,根据项目分层的思想,一个项目基本可以分为持久层,业务层和 web 层.而 Spring MVC 主 ...