文档库 最新最全的文档下载
当前位置:文档库 › C#实现ActiveX控件开发与部署---安装打包篇

C#实现ActiveX控件开发与部署---安装打包篇

因为C#开发的Dll是没有办法直接在页面中调用的,而且使用regsvr32是没办法注册的,只用使用regasm才可注册成功,所以我们需要把它处理一下。

首先,我们在刚才开发用的解决方案中,创建一个“安装项目”

然后添加一个“项目输出”

选择“主输出”

在建立的输出上右键属性,注意Register这一项一定要是“vsdrpCOM”。标识使用regasm来完成注册

另外提醒,在“检测到的依赖项”中双击“Microsoft .NET Framework”,然后“启动条件”的.Net Framework上右键属性这里可以调整安装包以来的framework版本,在安装项目右键属性的“系统必备”中,可以指定环境必须的framework版本。这些如果你是仅需要低版本要求时,是需要更改的,否则可能到目标主机上部署时会遇到莫名其妙的问题。

妥了,开始生成安装包。会生成一个exe,一个msi。这里我们使用msi即可。

另外注意,因为我们是使用msi的方式部署控件,这样就会有一个控件的安装过程(可以静默),所以你可以指定安装包的版本,用于以后自动升级;可以制作卸载程序,用于手动卸载等等,看各位的需求了,简单贴上来一个制作卸载的过程,供大家参考:

拷贝文件C:/Windows/System32/msiexec.exe文件,修改文件名为Uninstall.exe,添加到安装项目中,然后创建一个快捷方式。

在【用户的“程序”菜单下边】添加一个文件夹ActiveXUnstall,将快捷方式拖动到这里边。

在卸载控件上点击右键,属性:

设置Arguments,就是指定要卸载的程序,后面的ProductCode可以这样获得:

选中项目,然后鼠标放到右侧的“属性”上,就可以看到ProductCode了:

================================

现在我们有了这个msi,下面我们开始打成cab包

先去微软下载cabsdk(下载地址:https://www.wendangku.net/doc/da13243298.html,/kb/310618),我们需要里面的CABARC.EXE工具

然后我们开始编写cab安装配置文件install.inf (文件名可以自定义)

内容如下:

[version]

signature="$CHICAGO$"

AdvancedINF=2.0

[Setup Hooks]

HOOKRUN1=HOOKRUN1

[HOOKRUN1]

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

也有人提出过下面的形式:

[Version]

signature="$CHICAGO$"

AdvancedINF=2.0

[Add.Code]

WebControl.dll=WebControl.dll

Chart.dll=Chart.dll

;需要注意是在[Add.Code]区出现的文件要根据依赖性进行排序

[WebControl.dll]

file-win32-x86=thiscab

RegisterServer=yes

clsid={5B7E1537-103F-4484-8326-2AA643E4537F}

DestDir=11 ;默认目录C:/WINDOWS/Downloaded Program Files

FileVersion=1,0,0,0

[Chart.dll]

file-win32-x86=thiscab

RegisterServer=yes

clsid={0711C135-284C-4082-BE3D-C41B9B668527}

DestDir=

FileVersion=3,2,2697,18420

但经过实际测试这样是不行的,因为 RegisterServer的注册方式实际上是调用了regsvr32完成了控件的自动注册,而我们用c#实现的这个dll,不能通过regsvr32来完成注册,而是需要通过regasm来完成。所以这样的话,上面的配置脚本会导致注册失败。反过来讲,如果我们使用的是ocx的方式,上面的方法就是可行的。

而对于上面正确的脚本而言,有些人反映在某些系统环境下无法自动调用msiexec.exe,这样的话可能需要调整一下思路,编写一个批处理run.bat

set CURDIR=%cd%

msiexec.exe /i Setup.msi /qn

然后修改install.inf为

[version]

signature="$CHICAGO$"

AdvancedINF=2.0

[Setup Hooks]

hook1=hook1

[Deployment]

InstallScope=machine

[hook1]

run=%EXTRACT_DIR%/run.bat

相当于又套了一层批处理,让批处理来执行msiexec.exe,也有人说应该InstallScope=user,但是这些我问题我都没有碰到,各位如果在做的过程中遇到了,可以作为参考吧。

准备好了msi,准备好了安装配置脚本,下一步我们开始打包

在cmd中键入:

CABARC.exe N C:/Users/LUYI/Desktop/QRCode.cab

C:/Users/LUYI/Desktop/QRCodeActiveXInstall.msi C:/Users/LUYI/Desktop/install.inf

将inf和msi打包进QRCode.cab中,打包完成了。

在此补充一下,有一些网站,特别是广域网,访问下载这类控件包是需要对控件需要签名的,下面简单介绍一下怎么签名:

这里用到MakeCert.exe,Cert2Spc.exe,SignCode.exe.这些文件安装VS的时候已经安装.不知道位置,可以使用windows的搜索功能.

首先,利用MakeCert生成一个证书cer和一个私匙pvk.

MakeCert -sv MyKey.pvk n "CN=My Software Company" MyCert.cer

然后,用Cert2Spc将.cer文件转换成为PKCS #7软件发布Certificate(.spc文件)

Cert2Spc MyCert.cer MyCert.spc

最后,用SignCode,按着提示操作对cab文件进行数字签名

真正需要发布的时候,要从签名授权中心申请,并得到私匙.

原文地址:https://www.wendangku.net/doc/da13243298.html,/luyifeiniu/article/details/6078398

相关文档