繁体   English   中英

动态安装多个MSI的Visual Studio C#

[英]Installing multiple MSI's dynamically Visual Studio C#

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

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

提前感谢帮助:)

如果您使用的是VS Setup Project安装程序,则这比必须要做的要困难一点,但要困难得多。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM