透過visual studio建立安裝檔案
前一篇 如何在瀏覽器開啟應用程式 中講到開啟應用程式,接著要來講怎麼樣封裝應用程式在安裝檔內。
本篇使用的VS版本為 2019 community 英文版 (會選用英文的原因是為了有錯誤訊息時比較好找)
封裝應用程式
新增Installer專案
在VS 2019中預設是沒有這種的專案類型,必須要另外安裝,可以點擊 這個網址 下載或是在 Extension Manager
搜尋 Installer Project
記得要先關掉 vs 才會開始安裝
安裝重開方案後,要來新增專案,在專案範本中找到 Setup Project
並且建立
建立好後只要在專案點選編譯,就會有 install 的選項可以安裝測試了,接下來每一個步驟都會建議編譯後安裝確認效果
專案設定
建立好專案以後,可以看到一個被開啟的畫面,裡面包含下面幾個項目
- Application Folder
- User’s Desktop
- User’s Programs
首先要將原先的專案輸出結果放進來,點選 Application Folder
右鍵新增 Project Output
接著來改一些基本的資料,在方案總管點選專案再開啟屬性視窗
在設定 Setup Project 的過程中,建議可以把屬性視窗 pin 起來,還蠻常會用到的
加上註冊碼
在專案點選右鍵找到 Registry
,開啟註冊碼的設定畫面
根據上一篇的作法,要在 HKEY_CLASSES_ROOT
底下建立,這邊我使用專案屬性中的 Manufacturer 作為 custom protocol。
- 專案屬性可以使用 [] 來取得
- 預設的值,只要將名稱留空即可
- command 的執行檔名需要寫死
記得將刪除時移除註冊碼的部份啟用,這樣才不會有垃圾註冊碼在裡面
增加安裝步驟
預設的安裝步驟其實很簡易,就是選安裝範圍、路徑,最後就是安裝。
在這邊我準備要新增一個步驟來輸入值,並且將資料寫入到 config 中。
從專案點選右鍵找到 User Interface
。
在 Start 的區塊點右鍵 Add Dialog ,從清單中選擇一個項目來做為預計要新增的步驟,在這邊我選擇的是 Textboxes(A)
。
就可以看到 Start 的區塊增加了一個 Textboxes(A)
在最後一個項目,可以用滑鼠拖拉改變順序到第三個步驟。
接著打開 屬性視窗 來修改基本設定,可以看到可調整的程度很低,只有四個輸入框及畫面的標題這幾個項目而已,連位置什麼的都不能改變。(這邊就先不改任何設定)
使用 Custom action 修改 exe.config
前面所講到的都是透過介面的方式來操作,在這個專案中提供 Custom action 的功能,可以透過寫程式的方法來做更多的事情。
設定 Custom action
同樣的在專案右鍵中找到 Custom Actions
並且開啟,並且在 Install
的地方點選右鍵 Add Custom Action
,選擇前面在 Application Folder
中所建立的 Output 即可。
接著要把安裝步驟中輸入的值,可以讓後面的程式可以讀取,選到剛剛所加入的 Output 並開啟 屬性視窗 ,將欄位的名稱用這樣的格式包裝 value=[name]
寫到 CustomActionData
中。
新增 Installer Class
設定完畢以後,若直接這樣安裝,會發現報錯,因為缺少了一個程式的檔案,接著回到來源的專案新增檔案 Installer Class
。
開啟剛新增的檔案,可以看到裡面的程式會是這樣的。
1 | [ ] |
剛剛是在 Installer
設定輸出,在這邊同樣要對應的寫方法,可以透過 override 的方式來增加方法。相關的作法可以參考 MSDN 的文件。
修改config
先透過 Context.Parameters
的方法來取得剛剛所設定在 CustomActionData
中的值,接著使用 ExeConfigurationFileMap
取得 config 並且回寫。
System.Diagnostics.Debugger.Launch() 可以用來在安裝過程中偵錯,是一個好用的技巧。
1 | // 可以避免寫入config檔的時候失敗 |
使用數位簽章增加信任度
剛製作完的 msi 檔案,直接放在網站上讓人下載,會被瀏覽器認為是不信任的檔案,使用者必須經過重重關卡才能真正拿到安裝檔
瀏覽器怕使用者誤下載一個執行檔,導致電腦出問題,因此會在下載後檢查檔案是否包含合法的數位簽章。
為了避免這樣的問題,必須要加上數位簽章 (code sign),讓瀏覽器認可。因為這邊是公司其他部門的同事處理,就直接讓大家看一下有數位簽章會是什麼樣子。
結論
微軟提供的這個專案很陽春,很適合一些簡單需求的人使用,若有要比較客製化的步驟,則不建議使用。也是透過這次的實作才知道,原來瀏覽器會檢查簽章的合法與否,來避免使用者暴露於風險之中。
Reference
- [Visual Studio] 應用程式佈署大作戰 - 為Setup Project加入自訂的對話視窗以修改App.config的內容 | Ouch@點部落 - 點部落 (dotblogs.com.tw)
- 如何透過 C# 類別庫讀取 Web.config 或 App.config 的參數設定值 | The Will Will Web (miniasp.com)
- 如何將自訂參數傳入 Installer 類別的 Install 方法 ( Part 2 ) | The Will Will Web (miniasp.com)
- 程式學習筆記: 幫自己的exe檔建立自己的數位簽章 (limitx5.blogspot.com)