上一小節,主要介紹了構建最小級別的安裝包,這個安裝包所做的事情很簡單,主要是打包好一些文件,然後放到用戶機器的某個位置下麵。 這個小節,主要是說安裝過程的各種行為如何使用Wix編寫。 CustomAction 1. 使用內建元素 CustomAction 註意到我們之前給用戶安裝過一個文件 Foob ...
上一小節,主要介紹了構建最小級別的安裝包,這個安裝包所做的事情很簡單,主要是打包好一些文件,然後放到用戶機器的某個位置下麵。
這個小節,主要是說安裝過程的各種行為如何使用Wix編寫。
CustomAction
1. 使用內建元素 CustomAction
註意到我們之前給用戶安裝過一個文件 FoobarAppl10.exe,這個文件在wix通過File元素指明,註意它的Id是FoobarEXE
那麼我想在安裝完成之後,運行這個exe,就可以這樣寫:
如上,通過FileKey 找到要執行的文件。
還有一個例子,用NotePad打開安裝後的一個文件 Readme.txt,通過Property找到Notepad.exe, 然後再傳參數Readme.txt,這樣就可以打開了。
實際效果,安裝完成之後:
2. 通過 CustomAction 註入c#代碼,併在安裝應用程式時執行
上面介紹的方法畢竟使用起來比較受限,wix允許我們寫c# code 併在安裝時執行
1. 用VS創建工程
2. VS幫我們添加了一個cs文件,註意wix能執行的方法都要加Attribute CustomAction
參數 session 相當於上下文環境,先測一個最簡單的方法,session.Log 方法,這個是在安裝包按安裝過程中,嚮日志文件寫東西的介面。
更多的session信息參考微軟文檔,https://docs.microsoft.com/en-us/windows/win32/msi/session-object
3. 編譯完成後得到產物 MyCsutomAction.CA.dll
4. 添加到我們的安裝包工程里
5. 添加一個文件,專門定義剛纔的CustomAction, 註意BinaryKey是為了找到那個dll,DllEntry 是你要調用的方法名
6. 使用的地方
使用命令安裝做出來的安裝包,並指明生成日誌文件到當前目錄
;正常安裝 msiexec /i SetupProject1.msi ;安裝後寫日誌,MyInstaller.log msiexec /i SetupProject1.msi /l*v MyInstaller.log
觀察日誌文件,發現CustomAction 已經被執行了
3. 調試安裝包和 CsutomAction 註入的代碼
實際開發中註入的c# 不可能沒有bug,除非它真的太簡單,所以必須得會調試
1. 為了測試,加點Property在文件里
2. 在c# custom action這邊,寫一句代碼,把VS啟動起來
3. 實際安裝中,會彈出用VS打開源代碼工程,選好了就能調試代碼。
註意session中可以拿到之前定義的幾個Property,Name Age Address