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

MicroDraw CAD/CAM中间件

产品主页 http://www.microdraw.com

 
 
 

日志

 
 

控件的CAB包制作和发布(新版)msi&exe打包进CAB  

2014-05-24 16:30:59|  分类: 控件注册发布及打 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
-------------------------------microsee.inf ----------------------------------------
[version] 
signature="$CHICAGO$" 
AdvancedINF=2.0 
 
[Add.Code] 
setup.msi=setup.msi 
setup.exe=setup.exe 
 
[setup.msi] 
file-win32-x86=thiscab
hook=hook1 
	 
[setup.exe] 
file-win32-x86=thiscab 
	 
[Setup Hooks] 
hook1=hook1 
	 
[hook1] 
run=%EXTRACT_DIR%\setup.exe 


----------------------  MAKE_SEE_CAB.BAT -------------------------------
Echo 
Echo. ****************************************************  
Echo. *     MicroSee 图形控件数字签名程序    *
Echo. *          2014.3.2                               *
Echo. ****************************************************
Echo.
Echo. 第一步 生成 cab 文件,生成前请检查inf文件 ...
cabarc.exe -s 6144  N microsee.cab ..\release\setup.msi ..\release\setup.exe  microsee.inf
 
signcode -t http://timestamp.wosign.com/timestamp -n MicroSee浏览控件 -i http://www.microdraw.com  microsee.cab

Echo. 
Echo. 第三步 测试进行数字签名 ... 
chktrust.exe microsee.cab


----------------------  demo.htm -------------------------------
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>MicroSee浏览插件 Plugin 演示</title>
<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
<!--
function button1_onclick() {
MicroSee1.OpenFile(text1.value) 
}
//-->
</SCRIPT>
</head>
<body>
<p align="center"><b>MicroSee 浏览插件 Plugin[电信网络] 
演示(<A href="http://www.microdraw.com">www.microdraw.com</A>  )</b></p>
<P align=center>
<OBJECT id=MicroSee1 
style="LEFT: 0px; WIDTH: 575px; TOP: 0px; HEIGHT: 338px" 
codeBase=microsee.cab#version=1,0,0,1 height=338 
width=575 classid=clsid:38E682DC-4249-4ED3-92F9-64242DB5C367><PARAM NAME="_Version" VALUE="65536"><PARAM NAME="_ExtentX" VALUE="15214"><PARAM NAME="_ExtentY" VALUE="8943"><PARAM NAME="_StockProps" VALUE="0"></OBJECT>
</P>
<P align=center>File Name(dwg/dxf/jpg...):<INPUT id=text1 
style="WIDTH: 263px; HEIGHT: 22px" size=33 name=text1 value=http://www.gdsoftpark.com/tsyq/index_clip_image008_0000.jpg><INPUT id=button1 type=button value=Open name=button1 LANGUAGE=javascript onclick="return button1_onclick()"></P>
</body>
</html>





---------------------  参考资料 ---------------------------

封装,签章与部署

在你精心制作完了一个ActiveX控件后,一定迫不及待的想要部署出去给大家用(例如自然人凭证的组件),但是ActiveX控件不像我们一般在开发的.NET Framework应用程序,做个安装文件就可以丢出去的,而是要走几个步骤:

1. 建立一个安装程序,将组件封装到MSI文件内。

2. 设定安装信息文件(INF)。

3. 将组件封装到CAB档案内。

4. 使用程序代码签章,签署组件。

5. 设定网页引用的codebase路径,让客户端可以自动下载安装。

首先,我们先为控件项目建立一个安装程序,我的安装项目命名为MyControlInstaller



建立完成后,请将控件项目的主要输出加入安装项目中,此时安装项目会将.NET Framework以及控件的主要档案加入封装内,请检查主要输出的Register属性设定是否为vsdrpCOM,这会让安装程序在安装时将组件登录到客户端计算机的COM Registry Database内。



检查完后,请建置这个安装档,以产生setup.exe以及MyControlInstaller.msi档案。

 

建置完成后,我们就得到了setup.exe以及MyControlInstaller.msi文件,接着我们要编写一个INF文件,以让IE在下载CAB解压缩后,可以得到必要的安装指令。INF是一个类似以前INI格式的数据文件(可用记事本编辑),它的长相类似于下列指令:

[version]

signature="$CHICAGO$"

AdvancedINF=2.0

[Add.Code]

MyControlInstaller.msi=MyControlInstaller.msi

setup.exe=setup.exe

[MyControlInstaller.msi]

file-win32-x86=thiscab

clsid={C90E96C1-8534-4243-9530-960D9AF982CB}

hook=hook1

[setup.exe]

file-win32-x86=thiscab

[Setup Hooks]

hook1=hook1

[hook1]

run=msiexec.exe /i "%EXTRACT_DIR%\MyControlInstaller.msi" /qn

这个文件最重要的有几个地方:

1. [version]区段是给IE来识别,只要IE发现这个区段,就会自动解析这个INF档案。其中的AdvancedINF=2.0是表示要IE对每个部份依序解析。

2. [Add.Code]区段会提示要将CAB中的哪些档案加入暂存区,如果封装中有其他档案要加入的话,就必须要在这个区段中指明,但我们建议直接将要安装的档案全部加入安装项目即可,让这个区段只需登记安装程序所要的档案即可。

3. [MyControlInstaller.msi]以及[setup.exe]是针对文件所设定,必须要有一个安装的执行档会对应到网页中的GUID,以上例而言,MyControlInstaller.msi会对应到组件的GUIDIE如果在文件的设定中发现组件的GUID时,就会读取这个文件的其他设定,像是要启动的安装程序,或是注册文件(RegisterServer=yes)。

4. [Setup Hook]是指示IE要由什么指令来启动安装程序。本例是[hook1]自定义区段。

5. [hook1]是自定义区段,它会指示IE执行run所设定的指令。

 

 

NOTE

你的控件要视你的控件需求来编写这个INF,本例的INF只保证可以安装此控件。

有了INF文件后,接下来我们要将它封装到CAB文件,以允许IE自动下载安装,但很不幸的是,Visual Studio内建的封包项目所产生的CAB档无法让IE自动启动安装程序,所以我们只能靠以前的Cabinet SDK来做。

NOTE

然而微软的下载中心已不再提供Cabinet SDK,因此只能由外面的网站来找,像是这里:

http://www.pixelsplasher.com/_downloads/software/Microsoft-Cabinet-SDK/cabsdk.exe

请将Cabinet SDK下载并解压缩,会得到SDK的必要资源,其中的cabarc.exe是我们需要的压缩程序,透过它将setup.exe, MyControlInstaller.msi以及Install.inf(组件的INF文件)封装成CAB文件,它的指令是:

cabarc n [CAB File Name] [Add File1] [Add File2] [Add File3] …

其执行结果如下图:



现在,我们已经拥有了一个MyControl.cab文件,此时,我们就可以将它复制到网站项目中,然后在中加入这个CAB文件的codebase路径,如下列指令:

现在找一台未安装此组件的计算机来浏览此网页(不可以使用开发计算机,因为这样无法进行部署测试),理论上应该可以下载控件,但是你会看到这个提示:

使用.NET C#开发Activex控件系列之六:封装、签名、CAB发布

这表示因为Internet Explorer安全性设定所致,基本上我们无法要求客户端把我们的网站设为受信任网站(内部网站也许可以,但公开网站不可能),要让Internet Explorer不封锁的话,只有一个办法,就是对封装档进行数字签名。虽然我们现阶段不可能购买商用的数字签名(以Verisign的签章来说,一年要499美元),但我们可以使用makecert.exe来产生一个测试用的自我签章(Self-signed Certificate):

makecert -sr LocalMachine -n "CN=MyCert" -$ commercial -ss MyCertStore -in MyCert -sv MyCert.pvk -a sha1 MyCert.cer

NOTE

makecert.exe的详细信息可参考:http://msdn.microsoft.com/zh-tw/library/bfsktky3(VS.80).aspx

NOTE

您在以-sv参数设定输出私钥时,会被要求设定密码:

 



基本上我们建议你一定要为私钥设密码,否则一旦私钥被盗取,犯罪者可用它来伪造身份。

当你执行完上述的指令后,你会得到一个公钥档(MyCert.cer)以及私钥档(MyCert.pvk),私钥档是很重要的签署档案,开发人员必须要妥善的保护它。

在我们使用签章工具签署CAB档之前,我们还要执行两个程序,一个是将cer转换成spcSoftware Publisher Certificate),这个可以利用cert2spc.exe来做,它的指令很简单:

cert2spc [Cert1.cer Cert2.cer Cert3.cer ...] [Output.spc]

本例的指令是:

cert2spc MyCert.cer MyCert.spc

再来是将私钥以及SPC档合并成PFXPersonal Information Exchange)档,这个可以用pvk2pfx.exe来做,它的指令则是:

pvk2pfx –pvk [Private Key File] –pi [PVK Password] –spc [SPC file] –pfx [PFX File] –po [PFX Password]

本例的指令是:

pvk2pfx –pvk MyCert.pvk –spc MyCert.spc –pfx MyCert.pfx

当整个程序完成后,我们会得到MyCert.cerMyCert.pvkMyCert.spc以及MyCert.pfx档案,此时我们就可以使用签章工具signtool来签署CAB档案,请使用下列指令:

signtool sign /f MyCert.pfx MyControl.cab

NOTE

如果你对signtool.exe的指令用法不熟,可以用signtool signwizard来启动数字签名精灵的对话盒,再依指示做签署即可。

不过就算你完成了签署,IE仍然会阻挡你的封装,因为目前的签章是不被跟证书授权的,所以你需要在测试客户端上安装刚才产生的MyCert.cer到跟证书授权单位。方法是先将MyCert.cer复制到测试客户端,然后在凭证上双击,再按『安装凭证』,在汇入精灵的第二个步骤中,选择证书存储为『信任的跟证书授权』:

 

 



然后完成精灵,你会看到这个提示:



请按『是』接受,此凭证就会安装到受信任跟证书区。现在请重新浏览测试网页,上方的信息提示列会改变:

 



这就表示数字签名检查已经通过,此时就能按照一般程序来安装。然后测试组件是否与在开发计算机般正常运作。

针对Windows Vista以及Windows 7操作系统的计算机

前述的作法可以在Windows XP(浏览器为IE6)上正常运作,同时用户也无须额外的程序,但到了Windows Vista以及Windows 7操作系统,由于ActiveX的安装行为改变了,再也无法使用msiexec.exe /qn的方式在背景安装,此时我们就只能修改INF的指令,由setup.exe来启动安装程序,下列的INF内容即为可在Windows VistaIE7)与Windows 7IE8)上执行ActiveX控件安装的INF

[version]

signature="$CHICAGO$"

AdvancedINF=2.0

[Add.Code]

Installer.msi=Installer.msi

setup.exe=setup.exe

[Installer.msi]

file-win32-x86=thiscab

clsid={…}

hook=hook1

[setup.exe]

file-win32-x86=thiscab

[Setup Hooks]

hook1=hook1

[hook1]

run=%EXTRACT_DIR%\setup.exe

 

结语

本系列的文章带领你完成整个 .NET Framework 开发 ActiveX Control 的程序,有了这个程序,你可以再变化它来开发不同的进阶控件 (ex: 自然人凭证控件)

 

来源:http://www.dotblogs.com.tw/regionbbs/archive/2010/11/15/developing.active.x.control.with.cs.part3.aspx














  评论这张
 
阅读(648)| 评论(2)
推荐 转载

历史上的今天

评论

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

页脚

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