动态安装多个MSI Visual Studio C#

时间:2012-08-14 16:09:43

标签: c# visual-studio-2010 windows-installer installation

我有三个基于Windows的应用程序。我需要将它们部署到一个msi文件中。前两个文件有点像检查正确的计算机,如特定的计算机名称和登录用户名。我遇到的问题是如何将所有这三个应用程序部署到一个msi文件中。安装就像这样?: 1:安装窗口应用程序A. 2:如果应用程序安装不正确,则停止安装并删除应用程序B和应用程序C.但是如果一切正常,则安装最终的主应用程序,即应用程序C.

补充信息:应用程序A和应用程序B基本上是检查计算机的用户名和正确名称,然后将指定的值打印到注册表中。

提前获得帮助:)

1 个答案:

答案 0 :(得分:0)

如果你正在使用VS Setup Project安装程序,这比它必须要困难得多,但不是很多。

您应该做的第一件事是选择一个“主要”应用程序。该应用程序的安装程序将是用户调用以安装所有三个安装程序并将控制其他两个安装程序。

现在,将其他两个应用程序部署到其MSI文件中。这个过程相对简单;您必须做的唯一事情是确保可以使用命令行参数定义安装向导可能需要的任何自定义信息,并且可以无人值守的方式执行安装。 VS Setup Projects允许这两个;您必须在向导中定义任何自定义字段的参数名称,但假定无人参与功能是“免费”的。构建这些MSI后,将它们作为要安装的文件添加到主应用程序的主应用程序目录中。

现在,您必须在主应用程序的安装程序中定义自定义操作。这是通过创建一个继承自System.Configuration.Install.Installer的类,使用RunInstaller属性进行装饰,并将此Installer类的项目指定为安装程序的一组自定义操作来完成的。

在Installer类中,重写OnAfterInstall,OnBeforeUninstall和OnRollback方法。在OnAfterInstall方法中,调用Process.Start调用带有/ I选项的MsiExec.exe进行安装,传递第一个应用程序的MSI的路径和名称,并指定“/ q”选项以静默执行安装以及任何必须设置的属性(安装参数;路径,安装级别/组件,应用程序设置等)。对其他应用程序重复此操作,然后使用OnBeforeUninstall和OnRollback方法重复此过程,但指定/ x选项以卸载MSI。

完成后,您应该有一个包含其他两个MSI的MSI,安装后将默默安装其他两个MSI,卸载时将卸载其他两个MSI。对于更高级的安装控制,您可以通过检查处理程序中的savedState字典来区分“安装”和“修改/修复”(在修复期间,您应该修复子应用程序而不是尝试重新安装它们),并且您可以使用安装过程中的“组件”对话框安装其他两个应用程序(该信息将传递给自定义操作处理程序,也可用于选择是否将一个或两个MSI复制到主应用程序目录)。最后,您可以选择覆盖OnAfterCommit并删除MSI(但如果您这样做,则必须使用Windows保留的MSI副本卸载子包,这可能很难找到。)