最近项目须要在浏览器环境下读取员工身份证信息,要实现网页与硬件设备通讯,考虑了几种实现方式:web
1.借助ActiveX插件,经过程序库直接与设备通讯。跨域
优势:厂家提供了IE插件,开发简单浏览器
缺点:只能在IE浏览器运行,webkit下访问须要跳转IE,体验不友好安全
2.开发客户端程序,经过http与网页通讯。其有两种策略:服务器
优势:咱们的系统多在webkit环境运行,无痛兼容,无视跨域。websocket
缺点:开发较复杂,用户须要同时安装插件及客户端。框架
优势:兼容全部浏览器环境socket
缺点:须要仔细设计,避免多用户数据错乱,保证响应速度this
同时,为方便用户使用,以上方案都须要设置自定义协议,以在网页中直接调起应用程序(IE或客户端)。url
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)或者脚本文件,咱们须要新建一个项目来编写自定义逻辑。(最后须要将项目输出添加到”文件系统视图“的程序目录)
添加自定义动做库项目
新建类库项目
库项目中新建安装类
实现自定义逻辑
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('\\') + "\\";
//后续业务逻辑 } private void Installer1_BeforeUninstall(object sender, InstallEventArgs e) { //获取用户设定的安装目标路径, 注意,须要在Setup项目里面自定义操做的属性栏里面的CustomActionData添加上/targetdir="[TARGETDIR]\" string installPath = this.Context.Parameters["targetdir"]; installPath = installPath.TrimEnd('\\') + "\\";
} } }
代码经过自定义参数targetdir得到用户选择的安装路径,这个参数须要从外部传入。设置方法如图
注意:
1.[TARGETDIR]后的反斜杠必定不能少,不然安装会报错。
2.若是设置了Commit动做,必定要设置Install动做,不然安装会报错。
10.设置启动条件
你们都知道.net框架开发的程序都依赖于framework才能运行。咱们能够经过启动条件设置,当只有当客户机上有framework时才能安装成功 ;不然弹出下载询问框让用户选择安装framework。
切换到启动条件视图,选中.net framework,打开属性面板,设置目标版本便可。同时为保证下载速度,能够修改下载路径。
11.编译生成
编译成功后生成两个文件,setup.exe为启动文件(不依赖.net),另外一个为安装包程序。
为避免用户选择,能够利用rar自解压文件将两个文件打包到一块儿,一键安装