MSI 與 nuget 包:哪個更適合持續傳遞?
讓我們討論以下主題。目前正在使用眾所周知的 xcopy 方法部署應用程序。這種方法難以管理依賴項、文件更新等。有一些想法可以在一些包的幫助下開始應用程序部署,你知道就像你在 Linux 中的幫助一樣RPM,但適用於 Windows。
所以我有一個問題:在 windows 經典 windows 安裝程序 ( msi ) 或nuget或其他東西上使用哪個軟體包系統更好?
Ad-Hoc:如何避免我的 WiX/MSI 部署解決方案中的常見設計缺陷?
- MSI 文件中發現的常見問題的非常混亂且不太理想的臨時摘要。不是很好。有總比沒有好?書中沒有的東西(太亂了)。
極品飛車: WiX 快速入門短版
WiX & 微星:
MSI是公認的企業應用標準。與傳統部署技術相比,它具有一些主要的企業優勢( )。WiX是創建 MSI 文件的新開源方式。
and the short, concise version
- Wix 工具集下載(
1)主要WiX設置, Votive - Visual Studio 集成設置**2)**- WiX 文件 + 安裝 WiX 後,在安裝文件夾 " " 中找到**
WiX.chm和msi.chm**幫助文件,%ProgramFiles(x86)%\WiX Toolset v3.11\doc以便快速訪問文件。- 線上:
WiX Reference Manual v3,,Official WiX Tutorial。Github,Bug Tracker,Mailing List,FireGiant WiX KDB(FireGiant 是 WiX 的商業分支)。- 要了解Wix,您可能需要快速閱讀其背後歷史的非官方摘要。
- MSBuild - 使用 Visual Studio、Votive 和 MSBuild
- Harvesting ( 1 ):WiX 有自己的工具,用於根據輸入文件夾生成 WiX 標記。
+ 該工具稱為heat.exe。WiX 的商業分支FireGiant有一個名為HeatWave的工具,具有更多功能。 + 我很大程度上未經測試的是該工具**
WixHeatATLHarvesterExtension**:https ://github.com/nirbar/WixHeatATLHarvesterExtension (用於從 x64 模組收集系統資料庫資訊的 WiX Heat 擴展)其他工具:
- 然後,您可能想通過閱讀除 Wix 之外的其他方式來檢查傳遞安裝程序:
+ 使用什麼安裝產品?InstallShield、WiX、Wise、高級安裝程序等 + 另一個工具快速列表
- 主要工具:高級安裝程序, -InstallShield, -PACE Suite
你好世界和你好 WiX:
- 最後在Codeproject上查看有關 Wix 源文件及其組件的完整範例。這是 Wix 的**“Hello World”**。
- “你好 WiX - Visual Studio 中的分步操作”。
+ 這需要WiX和Votive(WiX Toolset Visual Studio Extension > - WiX 的 Visual Studio 集成,因此您可以獲得 Intellisense)。見下載頁面。 + 底部標記中的內聯註釋可能就是您需要開始的全部內容。 + WiX 預處理器變數/定義的小樣本。
- Hello WiX C# 自定義操作 + 如何將 C# 自定義操作添加到現有 WiX 項目。
影片樣本:
更多範常式式碼:
WiX 快速入門:以下是我發現的一些最佳範常式式碼連結:
- Helge Klein的真實 WiX 範例- 一定要檢查一下( Wayback - 存檔版本)。
- Rainer Stropek在 Github 上的 WiX 範例- 非常有幫助。
- Alex Schevchuk從 MSI 到 WiX - 內容老化,但非常出色。
- Chris Painter的 IsWiX 教程- 優秀的 WiX 範例。
最後:
- Phil Wilson的 MSI 範例 Github 儲存庫: https ://github.com/Apress/def-guide-to-win-installer 。最好的內容,但老化。一般 MSI 樣本,而不是 WiX 本身。
- 我的實驗站點:installdude.com。
- 如何創建-a-Windows-Service-MSI-Installer-Using-WiX。
- WiX 擴展:https ://github.com/nirbar/PanelSwWixExtension (
Dism.exe,etc...)調試:始終檢查所有事件日誌、應用程序日誌和MSI 日誌- 如果可用。順便提一下。並使用任何可用的調試工具並在執行任何其他操作之前搜尋確切的錯誤消息。
並檢查任何明顯缺失的執行時。例如:
.Net,.Net Core,Java,Silverlight,Direct X,VC++ Runtime,MS-XML(舊版),etc....自定義動作調試:
- 自定義操作執行時失敗的常見原因
- 調試自定義操作 + 對於本機程式碼/C++,只需將調試器附加到**
msiexec.exe** + Advanced Installer’s Debug C# Custom Actions 影片教程MSI 日誌記錄:
- 概述和總結(如何記錄、解釋日誌文件等…)
- 安裝站點:MSI 日誌“how-to”
- 更多 MSI 日誌記錄資訊
事件查看器:
- 按住
Windows Key、點擊R、鍵入eventvwr.msc並按下Enter。- 去
Windows Logs => Applications。尋找MsiInstaller events。- 也檢查其他日誌 (
Security,System,Configuration)。一般調試:
- 《調試燈》
- 應用啟動問題:調試構想(魚雷全面鋪開)
- ProcMon.exe : 交易工具。一刀切的工具。蜜蜂的膝蓋,最上層,躍遷,貓的睡衣。有效地使用它可能是一個挑戰,但它是最好的免費通用調試工具(保管的評論連結)。
+ 快速的基本範例 + Hanselman 的較長影片樣本(從大約 3:50 開始)
調試工具:
- 調試依賴問題的工具-
ProcMon.exe,VS,Dependency Walker,etc...+ COM 依賴錯誤 + Fuslogvw.exe(程序集綁定日誌查看器)- 基本服務調試工具:
+
Event Viewer,Task Manager,Services.msc+Process Explorer,NET command,SC.exe+ Windows 服務常見問題 (FAQ)錯誤程式碼:查找錯誤程式碼和異常消息。
部署助記符:考慮部署問題的一般助記符:(
What is locking使用中,惡意軟體),what is blocking(權限,防病毒,安全工具),what is corrupt(磁碟,惡意軟體,配置,加密)what are unexpected system states(磁碟空間,時間和日期設置,語言, 許可, Windows 更新檔狀態, 路徑太長, PendingFileRenames, 等等…),what are incompatible products(不能共存的東西),what is unreachable or misconfigured(什麼指向錯誤的位置和資源: 網路伺服器名稱, 磁碟路徑, URLs, 數據庫,服務、UAT 環境、PROD 環境等…)最後但同樣重要的是:(**what is missing**執行時、資源映像、設置文件等…)?注意:始終是第一個(下面的第 8 步)
Google exact error message:.Express Failure to Launch Debugging :,和check,Check( Java , VC++ Runtime , .NET , etc… )。然後,如果需要:,,如果你仍然不能讓它工作?(許多虛擬機缺乏必要的執行時 - 檢查)或者還檢查使用者評論,(新安裝程序可以消除錯誤情況)。也進行全面檢查?這些天到處都是。某些軟體(通常是伺服器軟體)可能需要整理出配置設置 ()。桌面應用程序可能需要啟動。
1)Reboot2)disable anti-virus3)launch as admin4)dependencies and runtimes5)verbose log6)event logs7)Try on a virtual``secondary computer?8)google exact error messages9)Run update for the application in question?10)malware11)misconfiguration``license鎖?: 有權限和鎖你可以試試**
run the tool with elevated rights嗎?你可能有磁碟損壞 -disk errors?Faulty ACL permissions? (可能的)。您anti-virus suite**已鎖定 MSI 試圖恢復的某些文件。您可以嘗試暫時禁用它來查看。請注意,該文件也可以是quarantined(移動到其他地方)。通用技巧?- 消費者問題,安裝 setup.exe 失敗:
- 部署問題的通用檢查表(替代下面的列表 - 推薦)。
- Visual Studio 問題: Visual Studio 安裝問題的檢查列表- 和更新版本
- .NET 修復: .Net 框架修復工具
- Broken Uninstalls : MS FixIt: 刪除不會解除安裝的包
- 日誌: Microsoft Visual Studio 和 .NET Framework 日誌收集工具
- Smartscreen 問題:數字簽名、誤報、標記的下載文件
對於無法正確安裝的設置。下面的一些通用技巧 - 除了檢查
event logs和installation-和application logs和googling any error messages(也總是這樣做 - 也許首先 - 但也許只是先重新啟動 - 在面對所有復雜性之前):
- 重新啟動:安裝失敗後首先重新啟動,看看是否可以解決鎖定和掛起的重命名問題。
- 其他電腦:嘗試安裝在另一台物理機器上?
* 安裝介質的重要冒煙測試! 3. 虛擬:嘗試安裝在虛擬機上?
* 經常過時,檢查執行時,檢查 Windows 更新。 4. 執行時:確保所需版本中存在各種類型的所需執行時:
* 常見:
VCRedist,.NET,.NET Core,Java,Direct X,etc...* 具體:Python,DBMS systems(PostgreSQL,MSSQL,etc...) * Windows 組件:IIS,MSMQ - Message Queue,Powershell,etc...5. 輔助帳戶:嘗試使用不同的管理員帳戶在主機上安裝。這可以解決由使用者配置文件中的錯誤引起的問題(一點也不罕見)。 6. 本地安裝文件:如果安裝文件在網路上,則在本地複制安裝文件(以消除網路錯誤源)。 7. 本地化問題:以其他語言提供的設置包含原始安裝程序(通常是英語)中未發現的全新錯誤並不少見。* “墨菲場”:
"We have managed to add additional bugs to the internationalized setups beyond the English version"。哦,人類說!真可惜。 * 嘗試下載英文安裝版並測試安裝? * 在英文機器或虛擬機上嘗試本地化設置? * 還要調查使用具有不同語言設置的另一個使用者帳戶執行。Setup.exe - 再次 - 常見的“阻止程序”:
- 損壞的設置文件:損壞的設置文件。重新下載確定?在浪費一整天之前將其作為第一步完成?正確的平台位數?正確的 CPU 架構?
- 惡意軟體:就問題而言,惡意軟體幾乎可以導致“任何事情”。
- 安全軟體:
Anti-virus,firewalls,scanners,etc...可能會干擾安裝。如有可能,請在需要時暫時禁用。- 磁碟空間:確保有足夠的磁碟空間!
* 清除磁碟空間的方法。長版。 * 就先跑吧
cleanmgr.exe。 5. 代理:如果有網路要求,是否有代理伺服器阻止事物? 6. 策略:在託管網路上可能有有效的策略來阻止某些功能,從而使安裝無法進行。試試虛擬機?通常限制較少。 7. 磁碟錯誤:掃描磁碟以查看是否正常。如果沒有,請先修復它。對於沒有 UPS 的台式機,現代 NVMe 磁碟可能會因斷電而失去大量數據。 8. 磁碟安全 ACL:自定義安全 ACL(NTFS 訪問配置)配置會導致 Windows 組件和類似軟體的執行時錯誤。除非您知道自己在做什麼,否則切勿對 Windows 目錄使用自定義 ACL。錯誤是確定的。一些連結:
- 嘗試創建“uc.micro”文件夾時,Windows 中的設置過程失敗訪問被拒絕
- SQL Server 2017 安裝卡住
- Visual Studio 安裝程序在 AspNetDiagnosticPack.msi 上失敗
- 安裝程序在安裝此軟體包時遇到意外錯誤 - 錯誤程式碼 2896
輕鬆訪問:
- XML 文件:安裝 XML 文件
- 誤報
- 安裝程序類方法-更多安裝程序類方法
- 這種安裝 COM+ 的方法會起作用嗎?
- Windows 安裝程序最佳實踐
- 重新啟動管理器和日誌記錄
- 在 wix 中更改我的組件 GUID?
- 簡化 WiX 標記- 您可以從 Wix xml 文件中省略很多源屬性
- 執行舊版應用程序(
virtuals,compatibility mode,repackaging,etc...)- 什麼是 ICE 規則
- 預處理器與本地化變數,以及包含文件的問題
- WiX 預處理器
重新打包,應用程序啟動調試:
Procmon.exe,capture,和repackaging_service installation``installer methods- 關於重新包裝的部分在這裡
- 如何使用調整後的設置在 /silent 模式下執行安裝
- 更多關於軟體分發的資訊
- Wix - 如何在沒有 UI 的情況下執行/安裝應用程序(嵌入 setup.exe、靜默執行 setup.exe、應用程序重新打包、引導程序/連結器)
升級:
其他一些 WiX 連結:
- WiX 3 對 .NET 3.5 的依賴
- 簡化您的 WiX 標記。
- 使用 WiX 註冊 COM EXE。
- 無法解除安裝,失敗。
- 動態連結庫。
- 微軟調試環境。
- 如何為 Windows Installer 創建必備軟體包?
- 如何將 CustomAction.CA.dll 嵌入到 MSI?
- 每次伺服器從 windows server 2012 R2 重新啟動時,已安裝的程序都會自動刪除
程序:
- 打開臨時文件夾:
Windows Key=> 點擊R=> 鍵入:%TEMP%=> 按:Enter。- ARP:開始
→執行→appwiz.cpl→ENTER以打開添加/刪除程序小程序(或點擊控制面板中的添加/刪除程序)。- 設置 GUI Win8/10:
Windows Key+ 點擊I=>Apps & Features。選擇進入並解除安裝。- Powershell的快速啟動:按住
Windows key,點擊R,輸入“powershell”並按下Enter。- 重新啟動圖形驅動程序:
Windows key++Ctrl並Shift點擊B。學習 Wix 的一些很好的起始連結:
從
Setup.exeWiX Bundle 或 MSI 文件本身提取文件:
- 從 EXE 中提取 MSI - 包括如何提取嵌入在 WiX Burn 捆綁包執行檔中的文件。
- 如何比較兩個(或多個)MSI 文件的內容?- 包括如何使用 WiX 的
dark.exe工具從 MSI 中提取文件正如我在上面建議的“ Wix 快速入門”文章中所寫:Wix 是親力親為的。只關注簡單但完整的真實世界範例,例如來自Codeproject的範例- 單獨閱讀文件可能只是令人困惑。
專注於將您的應用程序拆分為組件並進行重大升級。根據經驗,每個組件使用一個文件,並閱讀此答案以更好地理解組件創建:Change my component GUID in wix?
主要升級是部署軟體最常用的升級機制(另一種常見的升級類型是次要升級)。升級已經部署的內容顯然至關重要。在部署您的第一個軟體版本之前讓升級方案生效,以便您對部署解決方案充滿信心。
設置好組件並且升級解決方案正常執行後,其餘部分將在您完成應用程序的部署要求並在Wix 教程站點上檢查範例時就位:https://www.firegiant。 com/wix/tutorial/。
對於那些直接編寫 Wix 程式碼(沒有 GUI 編輯器)的人,我建議您檢查這個答案,以了解一種保持源文件簡潔的方法:WIX 中 guids 的語法?
進一步閱讀: