最近項目須要在瀏覽器環境下讀取員工身份證信息,要實現網頁與硬件設備通訊,考慮了幾種實現方式: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自解壓文件將兩個文件打包到一塊兒,一鍵安裝