【发布时间】:2017-06-22 08:46:53
【问题描述】:
我已使用 InstallShield 2015 Basic MSI 创建了设置。
假设在此设置中,用户可以选择要安装客户端还是服务器,
对于每种设置类型(客户端或服务器),他可以选择安装多个功能。
现在用户选择安装客户端设置并在其下包含 2 个功能,
如果他再次使用 UI 运行设置,他将进入维护模式,使他能够添加更多属于客户端的功能。
我的问题是他也可以从命令行(msiexec /I)再次运行相同的安装程序并尝试安装服务器安装程序类型,当前安装程序不会阻止或阻止它,这可能会导致他已经损坏的客户端安装程序已安装。
所以,我想我应该编写一个 CA 来检查当前设置是否已安装,并检查用户试图从命令行运行什么操作,如果它不是卸载阻止它(仍然需要支持从命令行运行卸载) .
这个逻辑正确吗?我如何知道用户从命令行运行的命令是什么?这意味着他运行 msiexec /I 而不是尝试从命令行卸载。
我想知道是否有一个 InstallShield\MSI 内置方式 \ 属性来防止从命令行安装相同的 MSI 两次?
【问题讨论】:
-
您是说您希望服务器和客户端功能在 UI 和命令行中相互排斥?
-
正确,用户可以安装客户端或服务器,从 UI 我可以阻止安装两者但不能从命令行安装,我不知道如何检查用户正在从命令行运行哪个操作,是否卸载\repair 允许或 Install 不允许。
-
如果用户请求安装两个冲突的功能或者用户请求安装的一个功能与另一个功能相冲突,我会编写一个类型 19 错误自定义操作来阻止安装安装。在条件表达式中使用功能请求和已安装状态运算符并将其安排在 CostFinalize 之后。
标签: installation windows-installer installshield