Unity發布Windows平臺后通過Advanced Installer制作安裝包

Unity發布Windows平臺后是一堆庫資源,以及一個可執行的exe文件,并不是一個安裝包,如果需要制作成安裝包,需要再進一步打包,本篇文章介紹一個Advanced Installer的軟件,專門用來制作Windows平臺的安裝包的。夸克網盤鏈接:https://pan.quark.cn/s/ae2f834ae61a

里面分別是三個文件,(第一個是Advanced Installer)第二第三個文件是自定義Advanced Installer事件的VS插件(如果需要用到,就需要安裝這兩個插件)。

在這里插入圖片描述

一、打開后選擇對應應用程序,新建項目
在這里插入圖片描述

二、填寫信息,分別是應用名稱,版本,發布者,下方的控制面板根據需求是否開啟(應用名稱這邊截圖中填寫的是屬性變量對應的屬性頁面設置的)
在這里插入圖片描述

屬性頁
在這里插入圖片描述

三、導入需要打包的應用程序
在這里插入圖片描述

四、設置開始菜單和桌面快捷方式(如有需求,沒需求也可以不設置)選中需要創建的快捷方式的文件,右鍵創建,然后將快捷方式存放至桌面以及開始菜單中
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

五、注冊表的設置(如有需要,例如開機自啟,其實就是把應用信息寫入注冊表,以及網頁打開應用也是需要把信息寫入注冊表,網頁打開應用后續會單獨寫一篇文章)
在這里插入圖片描述

六、設置安裝參數,安裝文件夾指的是打開安裝包選擇安裝位置時默認的位置,圖片中指向的C盤的路徑,下面的安裝選項中:靜默安裝勾選后,就不會再跳出選擇框等一些設置,直接會出現進度條進行安裝,因此正常安裝包需要勾選,除非你發布的是冷更新的安裝包(后續會單獨出一遍文章,寫冷更新的操作),管理員身份運行,建議勾上,有些操作必須管理員權限才能操作,例如在注冊表的Root中寫入信息,必須要管理員權限才行,不勾選這種操作就不能正常執行。
在這里插入圖片描述

七、設置構建信息,導出安裝包保存位置,一個是exe的文件名,以及exe的圖標
在這里插入圖片描述

八、運行環境和啟動條件(根據需求修改)
在這里插入圖片描述

九、設置對話框,主題也就是對話框的不同默認的樣式,對話框可以全部刪除后自定義,主要可能涉及到的就是最后完成安裝后,可能需要打開描述文件,或者直接啟動應用程序,以及以管理員身份運行等。因此需要設置啟動文件
在這里插入圖片描述

十、最后設置自定義操作,為什么需要這個呢,是因為安裝包,安裝后如果需要卸載,他不會把文件夾下涉及到的文件全部卸載掉。因此需要自行編寫一段刪除文件的腳本。
在這里插入圖片描述

十一、編寫腳本文件流程(注意我這邊使用的VS2022,C#編寫的,也可以使用其他的,請自行研究)

這時候就需要用到開頭提供的另外兩個文件,安裝完成后,打開VS新建項目(選擇 C# Custom Action Project for WiX v3)注意如果那兩個文件沒安裝成功,是不會顯示該模塊項目的。
在這里插入圖片描述

在這里插入圖片描述

十二、在CustomAction1中編寫對應的執行事件即可,例如卸載應用后刪除指定文件,那么怎么獲取指定文件位置,可以通過注冊表中的信息獲取。注冊表中的信息,怎么寫入呢畢竟也不是一開始就有的,這時候就有兩種寫入方式,一種就是上方提到的在安裝時設置好,直接寫入即可,第二種代碼運行后寫入。(以下代碼僅供參考,具體需要執行什么事件自行編寫)

using Microsoft.Deployment.WindowsInstaller;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;namespace AdvancedInstallerCustomAction
{public class CustomActions{[CustomAction]public static ActionResult CustomAction1(Session session){session.Log("Begin CustomAction1");string manufacturer = session["Manufacturer"];string productName = session["ProductName"];using (RegistryKey handlerKey = Registry.CurrentUser.OpenSubKey($"SOFTWARE\\{manufacturer}\\{productName}")){if (handlerKey != null){string value = (string)handlerKey.GetValue("Path");if (!string.IsNullOrEmpty(value)){//var path = Path.Combine(value, productName);RemoveSubDirectory(value, false);}}            }var desktopShutout = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), $"{productName}.lnk");RemoveFile(desktopShutout);var startMenuShutout = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs), productName);RemoveSubDirectory(startMenuShutout);return ActionResult.Success;}private static void RemoveFile(string path){FileInfo file = new FileInfo(path);try{if (file.Exists){file.Delete();}}catch{return;}}private static void RemoveSubDirectory(string path,bool isDeleteRoot=true){DirectoryInfo uper = new DirectoryInfo(path);try{if (uper.Exists){foreach (FileInfo subFile in uper.GetFiles()){subFile.Delete();}foreach (DirectoryInfo sub in uper.GetDirectories()){if (sub.GetFiles().Length > 0 || sub.GetDirectories().Length > 0)RemoveSubDirectory(sub);}if (isDeleteRoot) uper.Delete(true);}}catch{return;}}private static void RemoveSubDirectory(DirectoryInfo uper, bool isDeleteRoot = true){try{if (uper.Exists){foreach (FileInfo subFile in uper.GetFiles()){subFile.Delete();}foreach (DirectoryInfo sub in uper.GetDirectories()){if (sub.GetFiles().Length > 0 || sub.GetDirectories().Length > 0)RemoveSubDirectory(sub);}if (isDeleteRoot) uper.Delete(true);}}catch{return;}}}
}

十三、生成dll,點擊生成=》生成解決方案(或者點擊重新生成解決方案)生成完后,下面會告訴你dll地址
在這里插入圖片描述

十四、應用dll文件。點擊添加自定義操作,通過DLL,選擇剛生成的dll即可
在這里插入圖片描述

十五、設置自定義操作執行時間和順序,可以選中后設置,安裝時執行,或者卸載時執行,并且可以在左側調整執行順序。
在這里插入圖片描述

十六、構建安裝包,回到產品詳細頁面,點擊構建即可。構建完成后就能在你設置的輸出位置看到構建好的安裝包。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88958.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88958.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88958.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代數基本定理

代數基本定理 多項式 f(z)anznan?1zn?1?a1za0f(z) a_n z^n a_{n-1} z^{n-1} \cdots a_1 z a_0f(z)an?znan?1?zn?1?a1?za0?(其中 n>1n > 1n>1 且 an,a0≠0a_n,a_0 \neq 0an?,a0?0)在復數域內有根。 約定 以 ttt 為參數的閉曲…

springboot快速集成對接本地Ollama里的Deepseek-R1

書接上回,我們在本地安裝了一個Ollama,然后下載了一個deepseek-r1:7b,傳送門 本次目標:使用springboot對接ollama,完成簡單api對接 1.創建一個項目,選擇JDK17,Spring Boot版本3.5.3&#xff0c…

Docker部署私有倉庫

環境信息 centos7:docker26.1.4 IP:192.168.12.134 部署harbor wget https://github.com/goharbor/harbor/releases/download/v2.13.1/harbor-offline-installer-v2.13.1.tgz curl -L "https://github.com/docker/compose/releases/download/1.29.2…

張藝興探班RED女團一周年舞臺,見證21歲的夢想落地生根

從青澀的男團偶像,到如今獨當一面的音樂制作人、公司老板,張藝興的每一步都踏得堅定有力,他的故事充滿了熱血與夢想的色彩。而最近,他探班RED女團一周年舞臺現場的舉動,又一次成為粉絲和大眾熱議的焦點,也讓…

網絡編程 JAVA

一.網絡編程1. 什么是網絡編程?網絡編程是指利用計算機網絡實現程序之間通信的一種編程方式。在網絡編程中,程序需要通過網絡協議(如 TCP/IP)來進行通信,以實現不同計算機之間的數據傳輸和共享。2. 三個基本要素①IP …

UE5中的cesium

官方Fab地址(https://www.fab.com/zh-cn/),每月可下載免費素材 在UE5中添加插件cesium for unreal, 知識點一:服務器部署.b3dm地形數據 通過在線鏈接訪問數據目錄tileset.json,在cesium for unreal添加空白…

持續優化小程序排名,穩定獲取搜索流量

一、建立動態關鍵詞管理機制周期性關鍵詞迭代每月通過平臺搜索分析工具(如微信小程序后臺)抓取用戶搜索詞趨勢,淘汰搜索量下降的關鍵詞,補充行業熱點詞與長尾需求詞。按 “核心詞 季節 / 場景詞” 動態調整名稱與簡介&#xff08…

MyBatis 進階:連接池、動態 SQL 與多表關聯查詢

MyBatis 作為一款靈活的持久層框架,除了基礎的 CRUD 操作,還提供了連接池管理、動態 SQL 以及多表關聯查詢等高級特性。本文將從連接池原理出發,深入講解動態 SQL 的常用標簽,并通過實例演示一對多、多對多等復雜關聯查詢的實現&a…

反射型跨站點腳本(XSS)漏洞中網絡安全防火墻(WAF)被繞過進行內容植入與遠程劫持機制分析

在一次安全測試中&#xff0c;我發現目標站點在錯誤處理頁面對用戶輸入的查詢參數名未做任何轉義&#xff0c;當參數名中包含 <script> 標簽時&#xff0c;頁面會原樣渲染并執行其中的 JavaScript。本文將從實戰角度&#xff0c;詳細講解如何定位該反射型 XSS 漏洞、通過…

RAG實戰指南 Day 15:多語言與領域特定嵌入技術

【RAG實戰指南 Day 15】多語言與領域特定嵌入技術 引言 歡迎來到"RAG實戰指南"系列的第15天&#xff01;今天我們將深入探討多語言與領域特定嵌入技術——這是構建全球化、專業化RAG系統的關鍵技術。在現實業務場景中&#xff0c;我們經常需要處理多種語言的文檔&a…

無鉛PCB和無鹵pcb有什么區別?

在電子制造領域&#xff0c;環保法規的升級催生了多種特殊工藝的PCB產品。其中&#xff0c;無鉛PCB與無鹵PCB作為兩大主流方向&#xff0c;雖同屬綠色制造范疇&#xff0c;卻在技術路徑與應用場景上存在本質差異。環保指向的根本區別無鉛PCB的核心在于焊接材料的革新。傳統PCB采…

基于51單片機的貪吃蛇游戲Protues仿真設計

目錄 1 系統設計目的 2 系統實現功能 3 系統硬件設計 3.1系統設計框圖 3.2 液晶顯示模塊LCD12864 3.3 按鍵輸入模塊 3.4 時鐘電路和復位電路 4 系統軟件設計 4.1系統軟件流程 4.2 游戲引擎模塊程序設計 4.3 顯示模塊程序設計 4.4 輸入處理模塊程序設計 5 系統仿真…

HTML+CSS

一、HTML相關內容- <img> 標簽&#xff1a;- 用于在網頁中嵌入圖像&#xff0c; src 屬性指定圖像的路徑&#xff0c;可以是絕對路徑&#xff08;如 D:\Git\java115_java116\課堂代碼\前端代碼\pic\cat.jpg &#xff09;、相對路徑&#xff08;如 ./pic/cat.jpg &#x…

基于 Gitlab、Jenkins與Jenkins分布式、SonarQube 、Nexus 的 CiCd 全流程打造

前言 在當今數字化飛速發展的時代&#xff0c;軟件開發與交付的效率和質量成為了企業競爭的關鍵要素。為了滿足市場對軟件快速迭代和高質量交付的需求&#xff0c;越來越多的企業開始探索和實踐持續集成與持續交付&#xff08;CI/CD&#xff09;的開發模式。而 GitLab、Jenkin…

[密碼學實戰]密評相關題庫解析

[密碼學實戰]密評相關題庫解析 一、背景 依據《密碼法》第二十二條&#xff0c;關鍵信息基礎設施&#xff08;關基&#xff09;運營者必須開展商用密碼應用安全性評估&#xff0c;且需定期進行&#xff08;不少于每年一次&#xff09;。 二、核心解析 2.1 測評標準框架&#x…

谷歌開源庫gflags詳細說明

目錄 一.gflags 介紹 二.gflags安裝 三.gflags使用 1.包含頭文件 2.定義參數 3.訪問參數 4.不同文件訪問參數 5.初始化所有參數 6.運行參數設置 7.配置文件的使用 8.特殊參數標識 四.總結 一.gflags 介紹 gflags 是 Google 開發的一個開源庫&#xff0c;用于 C 應用…

Python爬蟲實戰:研究XlsxWriter 庫相關技術

1. 研究背景與意義 1.1 網絡爬蟲技術價值 網絡爬蟲作為數據采集的核心工具,在金融、醫療、教育等領域發揮關鍵作用。據 Statista 數據顯示,2025 年全球大數據市場規模預計達 3250 億美元,高效的數據獲取能力成為企業核心競爭力。Python 以其 80% 的市場占有率成為爬蟲開發首…

ThreadLocal內部結構深度解析(Ⅰ)

目錄 使用ThreadLocal 例子 內部結構分析 源碼解析 圖示詳解 ThreadLocal是Java中一個非常重要且常用的線程局部變量工具類&#xff0c;它使得每個線程可以獨立地持有自己的變量副本&#xff0c;而不是共享變量&#xff0c;解決了多線程環境下變量共享的線程安全問題。下面我…

Python 數據挖掘之數據探索

在數據挖掘的流程中&#xff0c;數據探索是非常關鍵的第一步&#xff0c;它能幫助我們深入了解數據的特點&#xff0c;為后續的預處理和模型構建打下堅實的基礎。我們主要圍繞四個方面展開&#xff1a;數據對象與特征、數據統計描述、數據可視化以及相關性和相似性度量。一、數…

高并發點贊場景Synchronized、AtomicLong、LongAdder 和 LongAccumulator性能分析

在高并發點贊場景中&#xff0c;我們需要一個高效、線程安全的計數器來記錄點贊數。synchronized、AtomicLong、LongAdder 和 LongAccumulator 都是 Java 中用于實現原子操作的類&#xff0c;但它們的性能在高并發下差異顯著。性能主要取決于線程競爭程度&#xff1a;競爭越高&…