InstallShield Block从命令行安装两次相同的MSI

时间:2017-02-05 09:16:48

标签: installation windows-installer installshield

我使用InstallShield 2015 Basic MSI创建了设置 假设在此设置中,用户可以选择是否要安装客户端或服务器, 对于每种设置类型(客户端或服务器),他可以选择安装几个功能 现在用户选择安装客户端设置并在其下包含2个功能, 如果他再次使用UI运行设置,他将进入维护模式,使他能够添加更多属于Client的功能。

我的问题是他也可以从命令行(msiexec / I)再次运行相同的设置并尝试安装服务器安装类型,当前设置不会阻止或阻止它,这可能会导致客户端设置损坏他已经已安装。

所以,我想我应该编写一个CA来检查当前安装是否已安装,并检查用户尝试从命令行运行的操作,如果不是卸载阻止它(仍然需要支持从命令行运行卸载)

这个逻辑是否正确?如何知道从命令行运行的命令用户是什么?意思是他运行msiexec / I而不是尝试从命令行卸载。

我想知道是否有一个InstallShield \ MSI构建方式\ property以防止从命令行安装两次相同的MSI?

1 个答案:

答案 0 :(得分:0)

我很难理解你。我希望我的答案符合您的需求。

首次运行MSI时,它处于安装模式。当你再次运行它时,它是一种维护模式。根据您编写安装程序的方式,您应该看到一个包含修复,更改或删除按钮的对话框。 “更改”按钮可用于允许用户添加其他功能或删除功能。这一切都可以通过命令行完成,也可以使用ADDLOCAL和REMOVE属性完成。这些属性采用分隔的功能名称列表。

人们犯错误的一个地方是使用条件未安装| REMOVE =“全部”自定义操作。这没有考虑到您可能具有多个功能并在维护模式下返回并重新配置应用程序的事实。 MSI具有功能和组件安装以及操作状态评估程序,可以在更适合此工作的条件下使用。

更新

如果用户请求安装两个冲突的功能或用户请求安装的某个功能与安装的另一个功能冲突,我会编写一个Type 19错误自定义操作来阻止安装。在条件表达式中使用功能请求和已安装的状态运算符,并在CostFinalize之后对其进行计划。