因为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(下载地址:http://support.microsoft.com/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 "%CURDIR%/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文件进行数字签名
真正需要发布的时候,要从签名授权中心申请,并得到私匙.