Link:https://blogs.msdn.microsoft.com/asiatech/2011/12/05/how-to-develop-and-deploy-activex-control-in-c/

How to develop and deploy ActiveX control in C#

There are lots of documents regarding how to develop and deploy an ActiveX control in native code(VB, C++, Delphi, …), however there’s few documents describe the manual in .NET. With this manual, you will learn how to develop, sign and deploy an ActiveX control with C#.NET. The practice can also be applied to C++.NET or VB.NET.

Create the ActiveX control DLL

In managed world, there’s no OCX control. So, we need to build a DLL control.

  1. In “Visual Studio 2010”, create a new Library project with “Visual C#”
  1. Rename the classname, and include “System.Runtime.InteropServices” namespace
  1. Sign your assembly with a strong name

Select Project-><Project Name> properties…, on Signing tab, check “Sign the assembly” and New a name key file.

  1. Select “Tools->Create GUID” to create a new GUID
  1. Add “ProgId”, “Guid”, “ComVisible” to your class, and implement your logic

using System;

using System.Runtime.InteropServices;

namespace DemoCSharpActiveX

{

/// <summary>

/// Demo HelloWorld class

/// </summary>

[ProgId("DemoCSharpActiveX.HelloWorld")]

[ClassInterface(ClassInterfaceType.AutoDual)]

[Guid("415D09B9-3C9F-43F4-BB5C-C056263EF270")]

[ComVisible(true)]

public class HelloWord

{

[ComVisible(true)]

public String SayHello()

{

return "Hello World!";

}

}

}

  1. Set ComVisible to true in AssemblyInfo.cs file.

[assembly: ComVisible(true)]

  1. Write a sample HTML page to test this ActiveX control

<!DOCTYPE>

<html>

<head>

<title>DemoCSharpActiveX webpage</title>

</head>

<body>

<OBJECT id="DemoActiveX" classid="clsid:415D09B9-3C9F-43F4-BB5C-C056263EF270" codebase="DemoCSharpActiveX.cab"></OBJECT>

<script type="text/javascript">

try {

var obj = document.DemoActiveX;

if (obj) {

alert(obj.SayHello());

} else {

alert("Object is not created!");

}

} catch (ex) {

alert("Some error happens, error message is: " + ex.Description);

}

</script>

</body>

</html>

  1. Build your dll and register it

C:\Windows\Microsoft.NET\Framework\v2.0.50727>regasm /codebase <full path of dll file>

To unregister your dll, just run regasm /u <full path of dll file>

  1. Now you can open your HTML file and test it. If it succeeds, IE will pop up the below message box.

If you cannot see this message box, you’d better check whether your IE is secured as http://support.real-time.com/browsers/security/ie/activex.html, please just try to change the settings to “Enable” or “Prompt”.

Create the installation package

For ActiveX controls written with native code, IE will register the control automatically when the webpage is visited the first time. However, IE WONT’T register a managed ActiveX control automatically so that we have to build an installation package for the registration.

  1. Add a new “Setup” project

In the current solution, select File->Add->New Project…, select Other Project Types->Setup and Deployment->Visual Studio Installer, Click Setup Project and specify a project name.

  1. Add your ActiveX control dll into this setup project.

Right click Application Folder, select Add->File…

Then browse your dll file and add into the project

  1. Select your ActiveX assembly and change Register to vsdraCOM.
  1. Now if you build this project, it will create the MSI installation package.

Package to cab

The last step is to package the MSI installation to a *.cab file, together with a *.INF file. There are several tools to make the cab package, here I would like to choose makecab.exe which is shipped in OS.

  1. Open the setup project which we create in the previous step
  2. Create the INF file of your ActiveX control, and put it to the root directory of the setup project.  The file name should be as same as the control dll’s name, and here’s the content of the file.

[version]

signature="$CHICAGO$"

AdvancedINF=2.0

[Setup Hooks]

install=install

[install]

run=msiexec.exe /package """%EXTRACT_DIR%\DemoCSharpActiveXSetup.msi""" /qn

  1. Create the Directive File for makecab.exe, and put it to the root directory of the setup project. I name the file as build.ddf, here’s the content

.Set DiskDirectoryTemplate=cab

.Set CabinetNameTemplate=DemoCSharpActiveX.cab

release\DemoCSharpActiveXSetup.msi

DemoCSharpActiveX.inf

The directive file format is documented here.

  1. Define the Post-Build event of the setup project.

Select the setup project, on the Properties panel, open the PostBuildEvent editor, and input the commands.

 
 
Here’re the commands.

cd "$(ProjectDir)"

"%WINDIR%\System32\Makecab.exe" /f "build.ddf"

  1. Rebuild the setup project, and the cab file will be created in cab folder.

Sign your ActiveX control

Now we also need to sign the ActiveX control as most of the IT professionals block the installation of unsigned ActiveX control in IE. The required tools are contained in Windows SDK, so please download at first.

http://www.microsoft.com/download/en/details.aspx?id=3138

  1. Make a certificate with the subject key file

makecert -sv myNew.pvk -ss myNewStore myNew.cer

  1. Run signtool.exe wizard to sign the *.cab file

1)      Run command “signtool signwizard”, then click “Next” on the Wizard

2)      Select your *.cab file and click “Next”

3)      Select “Custom” as the signing type, then click “Next”

4)      Click “Select from file…” and select the “*.cer” file as certificate, then click “Next”

5)      Select the private key file(*.pvk) and click “Next”

6)      Click “Next” several time to finish the wizard, don’t change any settings.

7)      After the *.cab file is signed, right click it and check “Properties”->”Digital Signatures”, you will find it is signed with our certificate. But it is not trusted, I will make it trusted in the next steps.

Deploy your ActiveX control

Now everything is ready, please just put the cab and html files to the same web folder.

Test the ActiveX control

Since we only signed the ActiveX control with a test certificate, we need to make the root certificate trusted on the client machine at first. Here’re the steps.

  1. Double click the *.cer file, go to “Certification Path”, select the root certificate and click “View Certificate”. As you see in the picture, currently it is not trusted.
  1. On the “Details” tab of the root certificate, click “Copy to File…” to export the root certificate as a *.cer file.
  1. Double click the exported *.cer file to open it, click “Install Certificate…” -> “Place all certificates in the following store” -> “Trusted Root Certification Authorities”. Then finish the wizard to install the certificate to trusted root authorities.
  1. Now open IE and browse the web page, the control will be downloaded silently if “Download signed ActiveX controls” is enabled.

References

Create ActiveX in .NET Step by Step

http://www.codeproject.com/KB/cs/CreateActiveXDotNet.aspx

HowTo: Deploy .NET ActiveX Control

http://nikolkos.blogspot.com/2009/08/howto-deploy-net-activex-control.html

Introduction to Code Signing

http://msdn.microsoft.com/en-us/library/ms537361(v=vs.85).aspx

Signing and Checking Code with Authenticode

http://msdn.microsoft.com/en-us/library/ms537364(v=VS.85).aspx

Sign Tool (SignTool.exe)

http://msdn.microsoft.com/en-us/library/8s9b9yaz(v=vs.80).aspx

Regards,

Zhixing Lv from APGC DSI Team

How to develop and deploy ActiveX control in C#的更多相关文章

  1. ePass1000 Full ActiveX Control Reference Manual Version 2.0

    ePass1000 Full ActiveX Control Reference Manual Version 2.0 Error Code Value Return Status Descripti ...

  2. OCX控件在IE中无法侦测到键盘消息( MFC ActiveX Control in IE Doesn't Detect Keystrokes)

    症状描述: Accelerator keys, such as ARROW keys, are first received by the message pump of the ActiveX co ...

  3. vs2015添加ActiveX Control Test Container工具(转载)

    http://blog.csdn.net/lphbtm/article/details/8647565 vs2010 中添加 ActiveX Control Test Container工具(转载) ...

  4. VB.NET或C#报错:You must hava a license to use this ActiveX control.

    VB.NET或者C# winform开发时,如果使用了Microsoft Visual Basic 6.0 ActiveX,并动态创建该控件实例,那么程序移植到没有安装Visual Basic 6.0 ...

  5. 一个ActiveX control的创建过程

    创建 根据这篇文章的介绍:http://www.cnblogs.com/time-is-life/p/6354152.html 来创建,里面包含了创建的基本过程以及属性事件方法的使用. 使用: 参考文 ...

  6. VS2008 ActiveX(ocx控件)的调试工具ActiveX Control Test Container安装说明

    vs2008中的TSTCON( ActiveX Control Test Container )工具非自动安装,而是作为一个例程提供.所以应找到该例程,并编译: 如vs2008安装在默认路径则 1, ...

  7. vs2010添加TSTCON( ActiveX Control Test Container )工具

    vs2010中的TSTCON( ActiveX Control Test Container )工具非自动安装,而是作为一个例程提供.所以应找到该例程,并编译: 如vs2010安装在默认路径则 1, ...

  8. 解决ActiveX Control异常:"没有注册类(异常来自 HRESULT:0x80040154(REGDB_E_CLASSNOTREG))"

    问题背景: 1.我们的程序是用winform调用unity web player 插件来作为播放器在客户端播放动画文件的. 2.播放器是由我们的客户端程序调用的 3.客户端程序默认是以管理员身份启动的 ...

  9. Visual Studio 2013附加进程调试IE加载的ActiveX Control无效解决方法

    默认Attach to选择了Automatically determine the type of code to debug,显示Native Code.但附加进程到iexplore.exe断点无法 ...

随机推荐

  1. 如何使用Windows Library文件进行持久化

    前言 想象一下,假设在你不知道的情况下,攻击者在你的计算机上放置了一个恶意文件.每当你访问桌面上某个文件夹时(例如Documents文件夹),都会执行一次该文件.这样的场景,通过利用一种鲜为人知的持久 ...

  2. 如何关掉UAC?

    你可能会问, 这也值得一写? 唉, 怎么说呢, 谁让咱一开始不会呢. ^_^ 好记性不如烂笔头嘛.   1. 打开一个command prompt, 输入msconfig回车. 2. 点击tools选 ...

  3. Java 与 JavaScript 对websocket的使用

    ebsocket,HTML5中新一代全双工通信协议.其底层仍然是http协议. 传统 HTTP 请求响应客户端服务器交互图 WebSocket 请求响应客户端服务器交互图 WebSocket 客户端支 ...

  4. Android实现图片轮显效果——自定义ViewPager控件

    一.问题概述 使用ViewPager控件实现可横向翻页.水平切换图片等效果,但ViewPager需要手动滑动才能切换页面,图片轮显效果的效果本质上就是在ViewPager控件的基础上让它能自动的进行切 ...

  5. 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(八)

    [重构](续) 牌的表示: 一副牌有52张,可用一整数数组描述.但是由于在游戏过程中牌数在不断减少,所以用一表示剩余张数的整数和一整数数组共同描述.C99支持一种变量长度数组,但用在这里并没有什么特别 ...

  6. UILabel文字竖排

    方法一: UILabel *mindName = [[UILabel alloc]initWithFrame:kCR(, , ,)]; mindName.text = @"苏\n小\n明&q ...

  7. Hibernate(九)HQL查询

    一.Hibernate提供的查询方式 OID查询方式:主键查询.通过get()或者load()方法加载指定OID的对象查询结果为一个 HQL查询方式:通过Query接口使用HQL语言进行查询 QBC查 ...

  8. PyQt5教程——菜单和工具栏(3)

    PyQt5中的菜单和工具栏 在这部分的PyQt5教程中,我们将创建菜单和工具栏.菜单式位于菜单栏的一组命令操作.工具栏是应用窗体中由按钮和一些常规命令操作组成的组件. 主窗口 QMainWindow类 ...

  9. Swift学习笔记(十五)——程序猿浪漫之用Swift+Unicode说我爱你

    程序猿经常被觉得是呆板.宅,不解风情的一帮人.可是有时候.我们也能够使用自己的拿手本领来表现我们的浪漫. 因为Swift语言是支持Unicode编码的,而Unicode最新已经支持emoji(绘文字) ...

  10. python3安装Beautiful Soup爬虫组件

    第一步:下载beautifulsoup4-4.3.2.tar.gz 第二步:拷贝解压缩目录到C:\Python34\beautifulsoup4-4.3.2 第三步: 第四步: 第五步:拷贝C:\Py ...