上一小節,主要介紹了構建最小級別的安裝包,這個安裝包所做的事情很簡單,主要是打包好一些檔案,然后放到用戶機器的某個位置下面,
這個小節,主要是總結安裝程序的各種行為如何使用Wix撰寫,
一、寫注冊表
安裝程序經常會給注冊表寫東西,這個方法是通過 RegistryKey 元素實作的,通常用 Root 和 Key 來確定寫注冊表的位置,然后子元素
RegistryValue 來在這個位置下面寫一條一條的專案,Name 和 Value 來確定這一項,
<DirectoryRef Id="TARGETDIR"> <Component Id="RegistryEntries" Guid="3609F43C-C313-4B87-AD47-28B34FB4FE3A"> <RegistryKey Id='FoobarRegInstallDir' Root='HKCU' Key='Software\MyInstallerReg\Foobar 1.0' Action='createAndRemoveOnUninstall'> <RegistryValue Type='string' Name='TestInstallDir' Value='[INSTALLDIR]'/> <RegistryValue Type='integer' Name='TestNumber' Value='123'/> </RegistryKey> </Component> </DirectoryRef>
安裝完成后,搜索注冊表,應該能看到上面的兩條

二、 Action
1. 內置行為
用例一:安裝完成之后,要求用戶重啟機器
<InstallExecuteSequence> <ScheduleReboot After='InstallFinalize'>Version9X</ScheduleReboot> </InstallExecuteSequence>
用例二:使用內建元素 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


轉載請註明出處,本文鏈接:https://www.uj5u.com/net/81885.html
標籤:C#
上一篇:C# 如何獲取日期時間各種方法
下一篇:C# 陣列冒泡排序復習
