2024-06-13 Share: visual studio打包可安裝的exe程式(新增設定檔)
https://blog.csdn.net/shown_G/article/details/132119256
Local Backup
一、關於這次打包的個人感受
我必須說,對於這個打包,我實在是非常難受,原因不是他有多難,而是因為所有現有的博客教程都不全面,而且也不夠細緻,對於第一次打包的人來說,簡直是災難!!!
我一個簡單的WPF應用程式(這個程式會用到外部的包,還有設定檔),硬是查了將近十幾篇文章也沒能找到我想要的答案,原因無它,所有的教程,都是一樣的,沒有更全面詳細的文章。
說說我遇到的困難。
第一,怎麼加入設定資料夾以及裡面的檔案?
第二,怎麼加入外部引用的套件?
最後我只能自己摸索,終於找到了我想要的,在這裡給各位新人演示一下,希望不要再踩和我一樣的坑,也能給剛學編程的你,一點小幫助。
二、打包可安裝的exe程式
1.安裝InstallerProjects
開啟VS,選擇擴充–>管理擴充–>線上(或選擇工具–>擴充和更新–>線上),搜尋Microsoft Visual Studio Installer Projects,進行安裝,安裝好之後,重新啟動vs(一定要重新啟動)。
2、新建 Setup 打包項目
2.1 打包之前,請先生成一個穩定的可執行項目,這個可執行項目就是要打包的對象
如果有圖標,可以先設定圖標後再生成
2.2 新增執行打包的steup項目
選擇解決方案–>新增–>新建項目
搜尋setup –> 選擇Setup Project –> 點選下一步
溫馨提示:
這個setup的項目名稱會成為你最終打包好以後安裝程式的預設安裝目錄名稱(所以不要隨便取名)
新建完成後,會出現以下介面
如果沒有自動開啟這個介面,那麼請按照以下操作開啟這個介面:
選擇你的Setup項目–> View –> 檔案系統
Setup 屬性說明:
Author : 一般填入公司名,會使用其作為軟體安裝目錄名
ProductName : 應用程式名稱,會使用其作為軟體安裝目錄名
Localization : 指定軟體運行地語種
TargetPlatform : 指定軟體目標平台x86 or x64
Version :發布版本號
InstallAllUsers : True 效果:“控制面板”程式中會顯示公司的名稱,安裝時預設為“任何人”
ProductCode : 預設給定無需修改,當Version 變更時會提示更改
3.配置Setup 項目主輸出對象
右鍵Application Folder –> Add –> 專案輸出
3.1 Application Folder 右鍵選單說明:
Application Folder : 應用程式包含的檔案設置
User's Desktop : 使用者桌面捷徑設定
User's Programs Menu : 使用者啟動選單的捷徑設定
3.1.1 Add 類型說明:
Folder : 新增目錄
專案輸出: 將選取專案產生dll 或exe 等
文件: 依照原始格式輸出,新增額外的依賴檔案( html 、不被主程式所引用的dll 、 exe 等),需要注意的是,這裡只新增 目前路徑下的文件,不包含資料夾以及資料夾中的子文件
程序集: 選擇指定版本程序集輸出
4、新增外部依賴資料夾或設定檔夾
重點來了,這裡其實很簡單,直接拖進去就完事,往往很多太過簡單的事情,就是最容易被忽略的,也是小白最容易踩的坑。
5、新增項目文件
右鍵Application Folder –> Add –> 文件
6.新增桌面捷徑
在Application Folder 資料夾中選取主輸出右鍵產生捷徑,將捷徑移至User's Desktop 資料夾中
千萬不要忘記設定快捷方式名稱和圖標
7、產生可安裝exe程式
選擇Setup 項目–> 右鍵生成
setup.exe 與Setup.msi的差別
msi 文件是windows installer 開發出來的程序安裝文件,它可以讓你安裝、修改、卸載你所安裝的程序,也就是說VS工具打包生成的msi文件就是windows installer的數據包,把所有和安裝文件相關的內容封裝在一個包包裡。 VS工具打包產生的exe檔主要是用來檢查安裝的環境(即係統必備),當安裝的環境檢查成功後,會自動再安裝msi檔。
補充一點:
有時候版本升級後,打包會報錯,可能是因為你這次打包中所需要的文件已經有變化,比如刪掉了部分文件,或者新增文件,或者把文件移動到了其他位置,這個時候打包就會報錯,因為你刪除,新增或移動,那麼你都需要在Application Folder 中做相應的修改,這個坑,如果我不說,新手必然會踩,總之我是踩過了的。
8、新增卸載程序
卸載功能實作需要新增: C:\Windows\System32\msiexec.exe
在Application Folder 資料夾中加入msiexec.exe ,建立捷徑,並設定屬性Arguments=/x {1028BF2E-832F-4B79-8D54-01CFB4BB30EC}(備註:{1028BF2E-832F-CFB4BB30EC}(備註:{1028BF2E-832F-4B79-8D5430 為項目屬性中的ProductCode ,當專案屬性中ProductCode 改變時,卸載這裡的Arguments 需要跟著改變)
這裡要注意的是 Arguments 的值前面需要加「/x 」,注意一定要加,否則卸載程式用不了
補充一點:
使用卸載功能的時候,如果打包時所有打包進去的文件缺少了任何一個,卸載時都會報錯,所以,打包時請務必確保所有打包文件在使用過程中,不會被刪掉,雖然這麼說很傻,但有時真有這種安裝時需要用到,而使用時會被某些功能刪掉的情況,總之我就有。
9、無需卸載舊包直接覆蓋升級
安裝上述步驟產生的安裝包,若程式變更後再次產生的安裝包,安裝時會提示已安裝了該產品的另一個版本,此時則需要使用控制面板或解除安裝程式解除安裝新包。
若程式變更想要直接覆寫升級,則需要修改Setup 專案屬性,將Version 改為大於原版本號,修改後系統會自動提示是否修改ProductCode,此時點“是”,此時產生的安裝包執行則不會再提醒了。
到這一步還沒完,雖然此時未卸載舊包可以直接安裝了,但是安裝後的dll 和exe 仍然是舊版本的dll、exe,要解決這個問題則修改所有組件的版本號(項目右鍵屬性–>應用程式–>組件資訊)(如下圖),修改組件版本和檔案版本,大於原始版本號即可。然後重新產生的安裝包就可以不用卸載直接覆蓋升級啦。
至此,打包就已經圓滿結束。
打完收工~~~
TAGS
59 person(s) visited this page until now.
Back