回答
许多安装。您需要一个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. .Net安装程序 - .exe和.msi之间的差异
- 3. 使用InstallShiled Basic MSI生成.exe和.msi
- 4. HOWTO和最佳工作安装(MSI)chainer +/bootstrapper
- 5. 如何在单个exe中合并.config和.msi文件
- 6. VB6 EXE和VB.NET DLL之间的IProgressCallBack
- 7. EXE和Global Hook DLL之间的通信
- 8. .COM和.EXE之间的区别
- 9. .exe和.dll之间的共享配置
- 10. 部署EXE在多个应用程序之间共享的最佳方式
- 11. 测试MSI安装的最佳做法
- 12. 压缩.msi文件的最佳方法?
- 13. 为exe和msi链接安装程序
- 14. 我可以发布msi和exe吗?
- 15. 如何设置三个集合之间的最佳和正确关系
- 16. stripslashes,utf8_decode,mysql_real_escape_string之间的最佳顺序?
- 17. 两点之间的最佳路线
- 18. MSI按需安装最佳实践?
- 19. 如何在.NET EXE和COM EXE之间进行通信?
- 20. AlarmManager和Handler + WakeLock之间的最佳方式是什么?
- 21. 获取DateA和DateB之间所有日期的最佳方法
- 22. ToString()和&concatenation之间的最佳实践或性能差异
- 23. ViewModel和Controller之间进行通信的最佳方式
- 24. Extjs几个ViewControllers和Views之间通信的最佳实践
- 25. 在PHP和Javascript之间传输数组的最佳方式
- 26. MyUserControl.List <NestedControl>和MyUserControl.Panel.Controls之间的最佳'连接'
- 27. 在ASP.NET和Silverlight 2之间共享DAL的最佳实践
- 28. 在WPF和Silverlight之间共享代码的最佳方式
- 29. 在servlet和jsp之间传输数据的最佳方式?
- 30. 与Netbeans合作的最佳方式