Dot-Net

MSI 與 nuget 包:哪個更適合持續傳遞?

  • July 28, 2014

讓我們討論以下主題。目前正在使用眾所周知的 xcopy 方法部署應用程序。這種方法難以管理依賴項、文件更新等。有一些想法可以在一些包的幫助下開始應用程序部署,你知道就像你在 Linux 中的幫助一樣RPM,但適用於 Windows。

所以我有一個問題:在 windows 經典 windows 安裝程序 ( msi ) 或nuget或其他東西上使用哪個軟體包系統更好?

Ad-Hoc如何避免我的 WiX/MSI 部署解決方案中的常見設計缺陷?

  • MSI 文件中發現的常見問題的非常混亂且不太理想的臨時摘要。不是很好。有總比沒有好?書中沒有的東西(太亂了)。

重要主題如何避免意外在我的 MSI 中分發敏感資訊?

極品飛車WiX 快速入門短版


WiX & 微星

MSI是公認的企業應用標準。與傳統部署技術相比,它具有一些主要的企業優勢( )。WiX是創建 MSI 文件的新開源方式。and the short, concise version

+ 該工具稱為heat.exe。WiX 的商業分支FireGiant有一個名為HeatWave的工具,具有更多功能。 + 我很大程度上未經測試的是該工具**WixHeatATLHarvesterExtension**:https ://github.com/nirbar/WixHeatATLHarvesterExtension (用於從 x64 模組收集系統資料庫資訊的 WiX Heat 擴展)

其他工具

  • 然後,您可能想通過閱讀除 Wix 之外的其他方式來檢查傳遞安裝程序:

+ 使用什麼安裝產品?InstallShield、WiX、Wise、高級安裝程序等 + 另一個工具快速列表

你好世界和你好 WiX:

+ 這需要WiXVotive(WiX Toolset Visual Studio Extension > - WiX 的 Visual Studio 集成,因此您可以獲得 Intellisense)。見下載頁面。 + 底部標記中的內聯註釋可能就是您需要開始的全部內容。 + WiX 預處理器變數/定義的小樣本

影片樣本

更多範常式式碼:

WiX 快速入門:以下是我發現的一些最佳範常式式碼連結:

最後:

調試:始終檢查所有事件日誌應用程序日誌MSI 日誌- 如果可用。順便提一下。並使用任何可用的調試工具並在執行任何其他操作之前搜尋確切的錯誤消息。

並檢查任何明顯缺失的執行時。例如:.Net, .Net Core, Java, Silverlight, Direct X, VC++ Runtime, MS-XML(舊版), etc....

自定義動作調試

MSI 日誌記錄

事件查看器

  • 按住Windows Key、點擊R、鍵入eventvwr.msc並按下Enter
  • Windows Logs => Applications。尋找MsiInstaller events
  • 也檢查其他日誌 ( Security, System, Configuration)。

一般調試

+ 快速的基本範例 + Hanselman 的較長影片樣本(從大約 3:50 開始)

調試工具

+ 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 errorsFaulty ACL permissions? (可能的)。您anti-virus suite**已鎖定 MSI 試圖恢復的某些文件。您可以嘗試暫時禁用它來查看。請注意,該文件也可以是quarantined(移動到其他地方)。


通用技巧?- 消費者問題,安裝 setup.exe 失敗

對於無法正確安裝的設置。下面的一些通用技巧 - 除了檢查event logsinstallation-application logsgoogling any error messages(也總是這樣做 - 也許首先 - 但也許只是先重新啟動 - 在面對所有復雜性之前):

  1. 重新啟動:安裝失敗後首先重新啟動,看看是否可以解決鎖定和掛起的重命名問題。
  2. 其他電腦:嘗試安裝在另一台物理機器上?

* 安裝介質的重要冒煙測試! 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 - 再次 - 常見的“阻止程序”:

  1. 損壞的設置文件:損壞的設置文件。重新下載確定?在浪費一整天之前將其作為第一步完成?正確的平台位數?正確的 CPU 架構?
  2. 惡意軟體:就問題而言,惡意軟體幾乎可以導致“任何事情”。
  3. 安全軟體:Anti-virus,firewalls,scanners,etc...可能會干擾安裝。如有可能,請在需要時暫時禁用。
  4. 磁碟空間:確保有足夠的磁碟空間!

* 清除磁碟空間的方法長版。 * 就先跑吧cleanmgr.exe。 5. 代理:如果有網路要求,是否有代理伺服器阻止事物? 6. 策略:在託管網路上可能有有效的策略來阻止某些功能,從而使安裝無法進行。試試虛擬機?通常限制較少。 7. 磁碟錯誤:掃描磁碟以查看是否正常。如果沒有,請先修復它。對於沒有 UPS 的台式機,現代 NVMe 磁碟可能會因斷電而失去大量數據。 8. 磁碟安全 ACL:自定義安全 ACL(NTFS 訪問配置)配置會導致 Windows 組件和類似軟體的執行時錯誤。除非您知道自己在做什麼,否則切勿對 Windows 目錄使用自定義 ACL。錯誤是確定的

一些連結


輕鬆訪問

重新打包,應用程序啟動調試

升級

其他一些 WiX 連結


程序

  • 打開臨時文件夾Windows Key=> 點擊R=> 鍵入:%TEMP%=> 按:Enter
  • ARP開始 執行 appwiz.cpl ENTER以打開添加/刪除程序小程序(或點擊控制面板中的添加/刪除程序)。
  • 設置 GUI Win8/10Windows Key+ 點擊I=>Apps & Features。選擇進入並解除安裝。
  • Powershell的快速​​啟動:按住Windows key,點擊R,輸入“powershell”並按下Enter
  • 重新啟動圖形驅動程序Windows key++CtrlShift點擊B

學習 Wix 的一些很好的起始連結:

Setup.exeWiX Bundle 或 MSI 文件本身提取文件:

正如我在上面建議的“ Wix 快速入門”文章中所寫:Wix 是親力親為的只關注簡單但完整的真實世界範例,例如來自Codeproject的範例- 單獨閱讀文件可能只是令人困惑

專注於將您的應用程序拆分為組件並進行重大升級。根據經驗,每個組件使用一個文件,並閱讀此答案以更好地理解組件創建:Change my component GUID in wix?

主要升級是部署軟體最常用的升級機制(另一種常見的升級類型是次要升級)。升級已經部署的內容顯然至關重要。在部署您的第一個軟體版本之前讓升級方案生效,以便您對部署解決方案充滿信心。

設置好組件並且升級解決方案正常執行後,其餘部分將在您完成應用程序的部署要求並在Wix 教程站點上檢查範例時就位:https://www.firegiant。 com/wix/tutorial/

對於那些直接編寫 Wix 程式碼(沒有 GUI 編輯器)的人,我建議您檢查這個答案,以了解一種保持源文件簡潔的方法:WIX 中 guids 的語法?

進一步閱讀

引用自:https://stackoverflow.com/questions/25004226