Wix 快速開發安裝包程式 (二)安裝包行為 CustomAction

来源:https://www.cnblogs.com/chenyingzuo/archive/2020/01/09/12173474.html
-Advertisement-
Play Games

上一小節,主要介紹了構建最小級別的安裝包,這個安裝包所做的事情很簡單,主要是打包好一些文件,然後放到用戶機器的某個位置下麵。 這個小節,主要是說安裝過程的各種行為如何使用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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 簡單寫一下多對多查詢model 不是多對多的欄位我就沒寫上來的 class Tag(models.Model): name = models.CharField(max_length=20,verbose_name='標簽') add_time = models.DateField(default= ...
  • PHP+InfiniteScroll實現網頁無限滾動載入數據實例,實現原理:當滾動條到底離網頁底部一定長度的時候,向後臺發送頁數並獲取數據。 ...
  • """ 返回查詢集的方法稱為過濾器 all() 返回查詢集中所有數據 filter() 返回符合條件的數據 一、filter(鍵=值) 二、filter(鍵=值,鍵=值) #兩個關係為and 三、filter(鍵=值).filter(鍵=值) #兩個關係為and exclude()過濾掉符合邏輯的數 ...
  • from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def __str__(self): # __uni ...
  • 簡介 locale.h 頭文件定義了特定地域的設置,比如日期格式和貨幣符號。接下來我們將介紹一些巨集,以及一個重要的結構 struct lconv 和兩個重要的函數。 庫巨集 下麵列出了頭文件 locale.h 中定義的巨集,這些巨集將在下列的兩個函數中使用: | 序號 | 巨集 & 描述 | | : | : ...
  • 小伙伴們別急著立 Flag,讓員外幫你分析一下哪些技術正流行、哪些技術已過時後再立也不遲。時勢造英雄,技術也是一樣,新的技術層出不窮,要真正做到順勢而為卻又不隨波逐流(少學點保護頭髮)。 ...
  • 奮鬥沒有終點 ! 好好學習72變,因為將來 沒有人能替你阻擋81難 。 生如螻蟻,當有鴻鵠之志; 命如紙薄,應有不屈之心 。 ​ 今天被這句話觸動了,所以開篇分享給大家。雞湯有毒,但有時大家卻靠它激勵自己繼續前行! python開發GUI 程式員的自我救贖,使用python開發性格分析工具 這篇文章 ...
  • 在上面文章abp(net core)+easyui+efcore實現倉儲管理系統——ABP WebAPI與EasyUI結合增刪改查之七(三十三) 的學習之後,我們知道了ABP自動幫助我們生成了WebAPI介面,接下我們通過修改腳本文件中的新增、更新與刪除功能的腳本,通過這些WebAPI介面實現增刪改... ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...