如果您使用的是 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,安装时会静默安装其他两个,卸载时会卸载其他两个。对于更高级的安装控制,您可以通过检查处理程序中的 savedState 字典来区分“安装”和“修改/修复”(在修复期间,您应该修复子应用程序而不是尝试重新安装它们),并且您可以在安装过程中使用“组件”对话框使其他两个应用程序的安装成为可选(该信息将传递给自定义操作处理程序,也可用于选择是否将一个或两个 MSI 复制到主应用程序目录)。最后,您可以选择覆盖 OnAfterCommit 并删除 MSI(但如果您这样做,