回答
許多安裝。您需要一個EXE來確保安裝所有先決條件:例如.NET框架;如果它們不是,則會安裝先決條件。然後它提取處理安裝的其餘部分的MSI包。
MSI提供了一些高級安裝功能:
- 回滾支持:如果在安裝過程中失敗的東西,它的系統返回的狀態開始安裝之前。
- 修復:如果您的應用程序停止正常運行,用戶可以使用此功能重新安裝應用程序。它恢復丟失的文件,註冊表項。
- 更新/升級:MSI處理應用程序更新/升級。 MSI軟件包可以配置爲在用戶開始安裝較新版本時自動執行以前版本的應用程序。這對用戶是透明的:看起來好像只安裝了新版本。
- 補丁:MSI支持補丁。如果只修改了應用程序的多個文件,則可以使用修補程序包(MSP)對其進行更新。該補丁將比完整軟件包小。
- 廣告快捷方式:您可以允許用戶不安裝應用程序的某些功能,除非它們已被使用。當用戶訪問這樣的功能時,MSI將安裝必要的文件。
雖然學習這項技術需要一些時間。
您可以從EXE文件中執行任何操作,而MSI僅用於安裝。 Inno Setup和NSIS安裝包分發爲exe文件。他們有描述安裝步驟的腳本語言。
WiX toolset具有MSI反編譯器叫dark
。
這取決於你在討論什麼樣的EXE。
MSI是由Windows安裝程序運行的安裝程序包。如果您使用Visual Studio進行安裝項目,它將爲您提供MSI和EXE。在這種情況下EXE只是一個引導程序(MSI or EXE)。在Windows Installer檢查完成後,它將運行MSI。
如果您使用其他工具如InnoSetup,這個EXE本身就是一個安裝包,而不是引導程序。
關於您關於MSI編輯器的問題:Orca MSI Editor。
如果不需要非常複雜的安裝程序,我建議使用Visual Studio安裝項目,因爲它很簡單,但功能足夠強大。
MSI是一個微軟安裝程序,它比舊的EXE,Wise Installer和其他許多人都支持它更新。它允許一個聰明的安裝與需要部署的東西(如CAB文件和註冊表設置等),它可以檢查以前的安裝等。
MSI是唯一的安裝,而EXE可以做其他事情像奔跑。
我會用InstallShield和建立一個MSI
我這些天使用MSI內部,儘管他們分佈EXE不確定#2
你可以告訴Visual Studio讓你的應用程序進入MSI/EXE。如果這樣做,並做你想做的,只要做到這一點。您在創建安裝程序方面付出了很多努力。
MSI表示您使用的是Microsoft的安裝程序。 Microsoft有理由推薦(即不提供應用程序認證)MSI。然而,一個好的MSI很難生產,所以我不推薦它,除非你需要你的應用程序被認證。
如果您不需要認證,我建議您使用Inno Setup以及前端。它很容易使用,併爲您提供簡單的界面來執行最常見的安裝程序任務。在一個捏,它支持腳本,讓你做任何它不支持。
我張貼的關於serverfault.com一些MSI的好處(和問題)摘要:
https://serverfault.com/questions/11670/advantages-of-using-msi-files
- 1. 合併msi和exe
- 2. 作爲一個EXE的WiX MSI和EXE
- 3. 什麼是最好的下載和安裝msi \ exe的最佳方式
- 4. .Net安裝程序 - .exe和.msi之間的差異
- 5. 使用InstallShiled Basic MSI生成.exe和.msi
- 6. 獲得2組點之間的最近對最佳組合
- 7. HOWTO和最佳工作安裝(MSI)chainer +/bootstrapper
- 8. 如何在單個exe中合併.config和.msi文件
- 9. 壓縮.msi文件的最佳方法?
- 10. 測試MSI安裝的最佳做法
- 11. 部署EXE在多個應用程序之間共享的最佳方式
- 12. .COM和.EXE之間的區別
- 13. VB6 EXE和VB.NET DLL之間的IProgressCallBack
- 14. EXE和Global Hook DLL之間的通信
- 15. .exe和.dll之間的共享配置
- 16. 查找組合對之間共享元素的最佳方式
- 17. 我可以發佈msi和exe嗎?
- 18. 爲exe和msi鏈接安裝程序
- 19. 如何設置三個集合之間的最佳和正確關係
- 20. 兩點之間的最佳路線
- 21. stripslashes,utf8_decode,mysql_real_escape_string之間的最佳順序?
- 22. 綁定:最佳實踐性能控制器之間結合
- 23. MSI按需安裝最佳實踐?
- 24. Android中的Thread和AsyncTask之間的最佳方式是什麼?
- 25. DEV和生產之間的GIT子模塊的最佳實踐
- 26. 如何在.NET EXE和COM EXE之間進行通信?
- 27. 與Netbeans合作的最佳方式
- 28. 在JNI和C++之間發送參數的最佳方式
- 29. ViewModel和Controller之間進行通信的最佳方式
- 30. 外殼擴展窗口:ContextMenu和IconOverlay之間的最佳通信?