注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

xian827991006

专注于DotNet编程,QlikView开发,网站seo,各种软件工具,互联网

 
 
 

日志

 
 
关于我

爱看书、爱探索的人. 目前关注与QlikView开发,推荐一个QlikView资源站。www.qlikviewcn.com

网易考拉推荐

【转】[C#] 基于.NET开发 ActiveX 控件(三) 部署篇  

2012-02-08 15:57:00|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

【转】[C] 基于.NET开发 ActiveX 控件(三) 部署篇 - xian827991006 - xian827991006

[C#] 基于.NET开发 ActiveX 控件(一) 基础篇

[C#] 基于.NET开发 ActiveX 控件(二) 安全篇

[C#] 基于.NET开发 ActiveX 控件(三) 部署篇

[C#] 基于.NET开发 ActiveX 控件系列文章,转载请注明来自:http://hi.baidu.com/1987raymond

本文将讲述和演示如何对.NET开发的ActiveX控件进行部署和发布。

1.概述

在一文中,我讲述了如何创建ActiveX控件,以及安全性方面应该注意的事项。当我们创建好ActiveX控件后,需要将它打包发布给我们的客户,以便注册COM Interop组件。

步骤1:创建Windows Installer项目,在安装过程中,为组件注册(即将ActiveX控件的程序集作为主输出添加到Setup项目中,在其属性中设置Register为True即可,与在VS中设置属性Register COM Interop生成时达到同样的效果);还可以通过Regasm.exe 工具,详情参看MSDN程序集注册工具 (Regasm.exe)

比如以下阐述如在在本机测试:通过下面的DOS命令注册组件:

regasm "D:\Raymond's Documents\Visual Studio 2005\Projects\DotNetActiveX\DotNetActiveX.Controls\bin\Debug\DotNetActiveX.Controls.dll"
@pause

运行结果:

D:\Raymond's Documents\Visual Studio 2005\Projects\DotNetActiveX\DotNetActiveX.C
ontrols\bin\Debug>regasm "D:\Raymond's Documents\Visual Studio 2005\Projects\Dot
NetActiveX\DotNetActiveX.Controls\bin\Debug\DotNetActiveX.Controls.dll"
Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.3053
Copyright (C) Microsoft Corporation 1998-2004.  All rights reserved.

Types registered successfully
Press any key to continue . . .

还可以通过下面的DOS命令取消注册组件(注意:不推荐使用上文中Tips提到的直接删除注册表中数据的方式删除注册组件,因为那样容易造成误删除,使得注册表被破坏)

regasm "D:\Raymond's Documents\Visual Studio 2005
\Projects\DotNetActiveX\DotNetActiveX.Controls\bin\Debug\DotNetActiveX.Controls.dll" /u
@pause

运行结果:


D:\Raymond's Documents\Visual Studio 2005\Projects\DotNetActiveX\DotNetActiveX.C
ontrols\bin\Debug>regasm "D:\Raymond's Documents\Visual Studio 2005\Projects\Dot
NetActiveX\DotNetActiveX.Controls\bin\Debug\DotNetActiveX.Controls.dll" /u
Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.3053
Copyright (C) Microsoft Corporation 1998-2004.  All rights reserved.

Types un-registered successfully
Press any key to continue . . .

另外一点,通过这种方式注册的组件,必须进行了强签名;然后通过gacutil   /i   {DLL   FileName} 添加到GAC;在组件服务Component   Services 中注册此DLL;然后才能正常的在页面中使用。

 

步骤2:创建CAB项目,将安装项目本文将演示此种方法(所有演示基于安全篇中已有的项目)。

如同下面这段HTML代码:

<OBJECT CLASSID="clsid:dcf0768D-ba7a-101a-b57a-0000c0c3ed5f"
CODEBASE="http://webserver/time.cab"
ALIGN="CENTER" WIDTH=270 HEIGHT=26 ID="T1"><PARAM NAME="Interval" VALUE=1000>
<PARAM NAME="Enabled" VALUE=1></OBJECT>

通过CODEBASE指定安装包的地址。

2.参考

关于打包ActiveX控件,请参考MSDN Packaging ActiveX Controls

3.为ActiveX控件创建Windows Installer安装项目

创建安装项目ActiveXTextBoxInstaller:

【转】[C] 基于.NET开发 ActiveX 控件(三) 部署篇 - xian827991006 - xian827991006
添加ActiveX项目到项目的主输出:

【转】[C] 基于.NET开发 ActiveX 控件(三) 部署篇 - xian827991006 - xian827991006

设置此主输出的Register属性为vsdrpCOM:

生成安装项目,得到ActiveXTextBoxInstaller.msi与setup.exe,将它们复制到制作CAB的文件夹下。

 

4.为ActiveX控件创建CAB项目

4.1下载相关工具

请先确认 Microsoft Cabinet Software Development Kit (SDK)以及makecert、signcode等工具是否已经安装,简单的测试方法是直接运行这些command命令,如果没有请到微软官方网站下载相应的工具并安装。

4.2创建.INF文件

关于INF文件格式参考:http://msdn.microsoft.com/en-us/library/aa751974%28v=VS.85%29.aspx#INFREF

创建INF文件DotNetAxTextBox.inf

[version]
signature="$CHICAGO$"
AdvancedINF=2.0

[Setup Hooks]
bootstrap=bootstrap
install=install

[bootstrap]
run="""%EXTRACT_DIR%\setup.exe"""

[install]
run=msiexec.exe /i """%EXTRACT_DIR%\ActiveXTextBoxInstaller.msi""" /qb
4.3生成.CAB文件

Cabarc.exe的命令参数等请参考:http://msdn.microsoft.com/en-us/library/aa751974%28v=VS.85%29.aspx#CABARC

基本格式:cabarc [<options>] <command> [<file list>]。

本例中使用:"D:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\cabarc.exe" -s 6144 N DotNetAxTextBox.cab ActiveXTextBoxInstaller.msi setup.exe DotNetAxTextBox.inf
@pause

其中-s 6144标识为数字签名预留的空间,下划线部分为cabarc.exe的路径。运行此命令生成未签名的DotNetAxTextBox.cab。

运行结果:

D:\Raymond's Documents\Visual Studio 2005\Projects\DotNetActiveX\DotNetActiveX.C
ontrols\bin\Debug>"D:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\
cabarc.exe" -s 6144 N DotNetAxTextBox.cab ActiveXTextBoxInstaller.msi setup.exe
DotNetAxTextBox.inf

Microsoft (R) Cabinet Tool - Version 5.00.2134.1
Copyright (C) Microsoft Corp. 1981-1999.

Creating new cabinet 'DotNetAxTextBox.cab' with compression 'MSZIP':
  -- adding ActiveXTextBoxInstaller.msi
  -- adding setup.exe
  -- adding DotNetAxTextBox.inf

Completed successfully
Press any key to continue . . .

4.4在web页面测试

复制生成的CAB文件至Web站点下,修改Default.aspx为:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>AxControl Test</title>
    <script type="text/javascript">
        function showInputText() {
            alert(myAxControlTest.InputText);
        }
    </script>
</head>
<body>
    <p>
<object id="myAxControlTest" height="22" width="220" codebase="http://localhost/ActiveXWebSite/DotNetAxTextBox.cab" classid="clsid:9F369A4D-7D3A-4d75-8BDB-3DD254D711A0">
</object>
<input id="ButtonTest" type="button" value="Show Input Text" onclick="showInputText()" />
 </p>
</body>
</html>

修改Internet 选项中的Local Interanet安全等级为Medium,我们可以看到提示信息,因为CAB尚未签名:

【转】[C] 基于.NET开发 ActiveX 控件(三) 部署篇 - xian827991006 - xian827991006

点击”安装ActiveX控件“安装此控件。

由于尚未进行数字签名,在Medium安全等级下,IE会阻止安装:

【转】[C] 基于.NET开发 ActiveX 控件(三) 部署篇 - xian827991006 - xian827991006

4.5为CAB签名

在从电子证书发布机构购买真正的证书之前,我们可以使用微软提供的测试证书。

使用Setreg.exe验证测试根证书是否受信任:

setreg 1 true
@pause

运行结果:

D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin>setreg 1 true
Updated Software Publishing State Key Values (0x23ca0):
   1) Trust the Test Root........................... TRUE
   2) Use expiration date on certificates........... TRUE
   3) Check the revocation list..................... TRUE
   4) Offline revocation server OK (Individual)..... TRUE
   5) Offline revocation server OK (Commercial)..... TRUE
   6) Java offline revocation server OK (Individual) TRUE
   7) Java offline revocation server OK (Commercial) TRUE
   8) Invalidate version 1 signed objects........... FALSE
   9) Check the revocation list on Time Stamp Signer FALSE
  10) Only trust items found in the Trust DB........ FALSE
Press any key to continue . . .

 

使用Makecert.exe生成证书需要的公钥私钥对:

"D:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\makecert.exe" -sk "KeyOfRaymond" -n "CN=Raymond's Company" DotNetAxTextBox.cer
@pause

运行结果(成功创建了证书)

D:\Raymond's Documents\Visual Studio 2005\Projects\DotNetActiveX\DotNetActiveX.C
ontrols\bin\Debug>"D:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\
makecert.exe" -sk "KeyOfRaymond" -n "CN=Raymond's Company" DotNetAxTextBox.cer
Succeeded
Press any key to continue . . .

 

使用Cert2SPC.exe工具生成软件发布证书:

"D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\cert2spc.exe" DotNetAxTextBox.cer DotNetAxTextBox.spc
@pause

运行结果:

D:\Raymond's Documents\Visual Studio 2005\Projects\DotNetActiveX\DotNetActiveX.C
ontrols\bin\Debug>"D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\cert2
spc.exe" DotNetAxTextBox.cer DotNetAxTextBox.spc
Succeeded
Press any key to continue . . .

 

使用Signcode.exe工具(新版本中已经替换为SignTool.exe请查看相应文档;需要单独下载,.NET2.0起就已经替换为SignTool了)为CAB文件创建数字签名:

signcode -spc DotNetAxTextBox.spc -k KeyOfRaymond DotNetAxTextBox.cab
@pause
运行结果:

D:\Raymond's Documents\Visual Studio 2005\Projects\DotNetActiveX\DotNetActiveX.C
ontrols\bin\Debug>signcode -spc DotNetAxTextBox.spc -k KeyOfRaymond DotNetAxText
Box.cab
Warning: This file is signed, but not timestamped.
Succeeded
Press any key to continue . . .

 

使用chktrust.exe验证CAB的签名:

.NET 1.0/1.1 SDK中使用(注意路径):

"chktrust.exe" “DotNetAxTextBox.cab”

.NET 2.0以上版本SDK使用signtool.exe:

"D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\signtool.exe" verify DotNetAxTextBox.cab
@pause

运行结果:

D:\Raymond's Documents\Visual Studio 2005\Projects\DotNetActiveX\DotNetActiveX.C
ontrols\bin\Debug>"D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\signt
ool.exe" verify DotNetAxTextBox.cab
SignTool Error: WinVerifyTrust returned error: 0x800B010D
        The certification path terminates with the test root which is not truste
d with the current policy settings.
SignTool Error: File not valid: DotNetAxTextBox.cab

Number of errors: 1
Press any key to continue . . .

 

可以看出验证失败,失败原因: Root Agency不受信任.

解决办法:

请首先参考http://msdn.microsoft.com/en-us/library/ms733813.aspx (运行MMC命令设置根证书参考http://msdn.microsoft.com/en-us/library/ms788967.aspx)。

在我本机可以查看到Root Agency的位置:

【转】[C] 基于.NET开发 ActiveX 控件(三) 部署篇 - xian827991006 - xian827991006
将Root Agency剪切到Trusted Root Certification Authorities->Certificates节点下。

注意:为了安全考虑,测试完毕后,请将Root Agency还原至之前的位置,同时删除掉我们添加的自己制作的证书。

再次验证:
D:\Raymond's Documents\Visual Studio 2005\Projects\DotNetActiveX\DotNetActiveX.C
ontrols\bin\Debug>"D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\signt
ool.exe" verify DotNetAxTextBox.cab
Successfully verified: DotNetAxTextBox.cab
Press any key to continue . . .

验证成功;复制签名后的CAB至Web站点下。

再次刷新页面:

【转】[C] 基于.NET开发 ActiveX 控件(三) 部署篇 - xian827991006 - xian827991006
点击安装ActiveX控件:

【转】[C] 基于.NET开发 ActiveX 控件(三) 部署篇 - xian827991006 - xian827991006

由此可以看出我们的CAB已经验证成功,点击Install安装我们的ActiveX控件,之后即可运行成功:

【转】[C] 基于.NET开发 ActiveX 控件(三) 部署篇 - xian827991006 - xian827991006

【转】[C] 基于.NET开发 ActiveX 控件(三) 部署篇 - xian827991006 - xian827991006
点击继续完成安装后页面会刷新:

【转】[C] 基于.NET开发 ActiveX 控件(三) 部署篇 - xian827991006 - xian827991006

至此,关于ActiveX的开发部署整个过程介绍完毕。

由于我们采用的Windows Installer安装控件,因此可以在添加删除程序处删除我们的控件。

补充说明:本文中一些命名可能需要根据测试的PC的具体情况做相应的修改,比如SignTool的位置,SignTool的版本等;版本不命令参数也不一样,具体参考msdn相关文档。同时另外一点大家需要注意的,用.NET开发的ActiveX控件只支持在安装了.NET并且浏览器允许.NET的情况下才可以正常使用。

 

  评论这张
 
阅读(683)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017