Wix中注册c#开发的Activex控件

一、使用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加入进去,这样文件就会拷贝过去了

时间: 2024-10-25 04:13:59

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

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

"/"应用程序中的服务器错误. 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件"c552ea94-6fbb-11d5-a9c1-00104bb6fc1c". 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Threading.ThreadStateException: 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件"

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

Win 10 64bits系统中Matlab 64位软件没有LED Control Activex控件,LED ActiveX Control控件位于Gauges Blockset模块中,而Gauges Blockset模块只能安装在Matlab 32-bit的版本中(并不是一定需要安装在window 32-bit,本人测试环境为win10 64bit),在win10 64-bit环境下安装时默认安装的是Matlab 64-bit,所以不会安装Gauges Blockset模块,当然就不会有Ac

【转载】基于MFC的ActiveX控件开发(1)

原文:http://iysm.net/?p=114 ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中.在VC下ActiveX控件的开发可以分为三种,一种是直接用COM的API来开发,这样做显然非常的麻烦,对程序员要求也非常高,因此一般是不予考虑的:一种是基于传统的MFC,采用面向对象的方式将COM的基本功能封装在若干MFC的C++类中,开发者通过继承这些类得到COM支持功能.MFC为广大VC程序员所熟悉,易于上手学习,但缺点是MFC封装的东西比较

开发ActiveX控件调用另一个ActiveX系列1——开发一个MFC ActiveX控件

ActiveX开发的教程有很多,我也从中受益匪浅,例如以下这几篇: 基本教程:http://www.cnblogs.com/guenli/articles/1629915.html 注意事项:http://jon-lt.iteye.com/blog/1676272 属性.方法开发:http://blog.csdn.net/waxgourd0/article/details/7652478 但是由于我的目的是开发一个身份证识别仪的ActiveX控件,因此我就要先仿照识别仪ActiveX开发一个Ac

使用C#开发ActiveX控件(新)

前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是用C++或VB语言开发,本文介绍另一种方式,在.NET Framework平台上,使用C#语言开发ActiveX控件. 虽然本文通篇都在讲如何使用C#语言开发ActiveX控件,但我并不极力推荐使用这种技术,因为该技术存在明显的局限,即需要浏览器端安装.NET Framework(版本取决于开发Ac

基于MFC的ActiveX控件开发 (转)

ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中.在VC下ActiveX控件的开发可以分为三种,一种是直接用COM的API来开发,这样做显然非常的麻烦,对程序员要求也非常高,因此一般是不予考虑的:一种是基于传统的MFC,采用面向对象的方式将COM的基本功能封装在若干MFC的C++类中,开发者通过继承这些类得到COM支持功能.MFC为广大VC程序员所熟悉,易于上手学习,但缺点是MFC封装的东西比较多,因此用MFC开发出来的控件相对会比较大,因此比较

[转]C#开发ActiveX控件,.NET开发OCX控件案例

引自:百度   http://hi.baidu.com/yanzuoguang/blog/item/fe11974edf52873aaec3ab42.html 讲下什么是ActiveX控件,到底有什么作用?在网页中又如何使用OCX控件,如QQ邮箱的大文件上传应该就是使用OCX控件的,下面开始吧. 0. 前言 ActiveX控件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中.使用ActiveX插件,可以轻松方便的在 Web页中插入多媒体效果.交互

VS 2012 C#ActiveX控件开发总结

ActiveX 控件以前也叫做OLE 控件或OCX 控件,它是一些软件组件或对象,可以将其插入到WEB 网页或其它应用程序中.使用ActiveX 插件,可以轻松方便的在Web 页中插入多媒体效果.交互式对象以及复杂程序等等.通常使用C++或VB 开发ActiveX 控件,本文探讨一下在Visual Studio 2012 环境中使用C#开发ActiveX 控件的技术实现. 一.ActiveX控件的开发 1.新建一个空白的解决方案 2.在解决方案上右击→添加→新建项目→Visual C#→Wind

配置ActiveX控件在网页中下载安装

先检查客户端浏览器是否安装了ActiveX控件,如果没有安装ActiveX,就需要先给浏览器提示下载并允许安装.否则就直接使用该ActiveX控件.我们可以使用CodeBase来满足我们的要求:下面是一个html的调用: <object classid="clsid:636B8CE1-7512-464C-B63C-FC75BDCA21DB" codebase="Charles2008ActiveX/setup.exe#version=1,0,0,0" widt