VS2017打包注册IE插件及修改IE安全选项设置【转】
前言
最近项目需要在浏览器环境下读取员工身份证信息,要实现网页与硬件设备通信,考虑了几种实现方式:
1.借助ActiveX插件,通过程序库直接与设备通信。
优点:厂家提供了IE插件,开发简单
缺点:只能在IE浏览器运行,webkit下访问需要跳转IE,体验不友好
2.开发客户端程序,通过http与网页通信。其有两种策略:
- 开发基于HTML/Javascript的Chrome插件,直接与客户端本地端口通信。
优点:我们的系统多在webkit环境运行,无痛兼容,无视跨域。
缺点:开发较复杂,用户需要同时安装插件及客户端。
- 经过中间服务器中转,客户端通过http提交读卡数据;网页通过websocket或者http查询服务器;
优点:兼容所有浏览器环境
缺点:需要仔细设计,避免多用户数据错乱,保证响应速度
同时,为方便用户使用,以上方案都需要设置自定义协议,以在网页中直接调起应用程序(IE或客户端)。
1.安装打包插件
vs2017并没有自带安装项目模板,需要自行下载安装。
搜索Microsoft Visual Studio 2017 Installer Projects,下载安装即可。
2.创建安装项目
3.设置基础属性
选中项目,打开属性面板,可以设置项目相关的基本属性信息。
其中比较有用的设置如上,部分基本信息会显示在控制面板的【添加/删除程序】列表里。
默认安装的路径为programs/[Manufacture]/[ProductName],所以可以根据需要设置属性Manufacture的值。
当然默认安装路径可以修改,稍后介绍。
4.添加打包内容
项目右键菜单切换到文件系统视图
Application Folder即安装后的程序目录,我们需要把要安装的内容添加进去。根据实际情况,选择项目输出或者直接添加文件 。
项目输出是指要打包的内容是解决方案里另一个项目的输出结果。
我这里要打包的内容为厂家提供的插件,所以选择了直接添加文件。
5.设置文件属性
由于打包的内容是浏览器插件,需要注册到系统才能使用。而安装项目已经提供了这样的自动注册功能。
选择要注册的文件,点属性菜单设置注册方式即可。属性菜单还有其它设置项,可根据需要设置。
6.修改默认安装路径
选中程序目录,打开属性面板,修改默认路径即可。(可以留意一下这里的TARGETDIR)
7.设置注册表
由于IE默认的安全设置,对插件运行不太友好。我们通过注册表设置可以修改它。
项目右键菜单切换到注册表视图
以下注册表项完成了对ActiveX相关设置的修改
启用 下载已签名的 ActiveX 控件
启用 下载未签名的 ActiveX 控件
启用 运行 ActiveX 控件和插件
启用 对没有标记为安全的 ActiveX 控件进行初始化和脚本运行
启用 允许以前未使用的 ActiveX控件在没有提示的情况下运行
启用 对标记为可安全执行脚本的 ActiveX 控件执行脚本
启用 ActiveX 控件自动提示
取消 对该区域中的所有站点要求服务器验证(https:)
添加可信站点
Domains下可添加域名站点,Ranges下添加IP站点,区别只在于域名只需要设置http键即可。
图中cmurl183可随意填写。
8.设置安装界面
项目右键菜单切换到安装界面视图
安装界面可修改的范围比较小,可以根据需要删除一些界面
9.添加自定义操作(可选)
通过自定义操作我们可以在安装前后、或者卸载时执行一些特殊的业务逻辑。比如操作环境变量等。
项目右键菜单切换到自定义操作视图
显示了安装的各个阶段,右键菜单即可添加需要执行的动作来源。
由于只能添加程序目录的可执行文件(exe,dll)或者脚本文件,我们需要新建一个项目来编写自定义逻辑。(最后需要将项目输出添加到”文件系统视图“的程序目录)
添加自定义动作库项目
新建类库项目
库项目中新建安装类
实现自定义逻辑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
using Microsoft.Win32; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Configuration.Install; using System.Diagnostics; using System.Linq; namespace InstallClassLibrary { [RunInstaller( true )] public partial class Installer1 : System.Configuration.Install.Installer { public Installer1() { InitializeComponent(); this .AfterInstall += Installer1_AfterInstall; this .BeforeUninstall += Installer1_BeforeUninstall; } private void Installer1_AfterInstall( object sender, InstallEventArgs e) { //System.Diagnostics.Debugger.Launch(); //获取用户设定的安装目标路径, 注意,需要在Setup项目里面自定义操作的属性栏里面的CustomActionData添加上/targetdir="[TARGETDIR]\" string installPath = this .Context.Parameters[ "targetdir" ]; installPath = installPath.TrimEnd( '\\' ) + "\\" ;<br> //后续业务逻辑 } private void Installer1_BeforeUninstall( object sender, InstallEventArgs e) { //获取用户设定的安装目标路径, 注意,需要在Setup项目里面自定义操作的属性栏里面的CustomActionData添加上/targetdir="[TARGETDIR]\" string installPath = this .Context.Parameters[ "targetdir" ]; installPath = installPath.TrimEnd( '\\' ) + "\\" ;<br> } } } |
代码通过自定义参数targetdir获得用户选择的安装路径,这个参数需要从外部传入。设置方法如图
注意:
1.[TARGETDIR]后的反斜杠一定不能少,否则安装会报错。
2.如果设置了Commit动作,一定要设置Install动作,否则安装会报错。
10.设置启动条件
大家都知道.net框架开发的程序都依赖于framework才能运行。我们可以通过启动条件设置,当只有当客户机上有framework时才能安装成功 ;否则弹出下载询问框让用户选择安装framework。
切换到启动条件视图,选中.net framework,打开属性面板,设置目标版本即可。同时为保证下载速度,可以修改下载路径。
11.编译生成
编译成功后生成两个文件,setup.exe为启动文件(不依赖.net),另一个为安装包程序。
为避免用户选择,可以利用rar自解压文件将两个文件打包到一起,一键安装