MSI:仅在未安装其他组件的情况下,如何安装组件

|| 我的应用程序包含一个可选组件,该组件的快捷方式将取代默认安装提供的快捷方式。如果无法安装此可选附加功能,我不知道如何使其仅安装默认快捷方式-还是我只需要给它们起一个相同的名称并希望获得最好的?这需要通过“自定义安装”树以及常规按钮进行。 看到它的工作方式是,如果在安装时额外选择了该选项,则主应用程序的“开始”菜单快捷方式必须指向此菜单,它会在需要时自行打开主菜单。 我正在使用InstallShield 2011 Professional。 编辑: 澄清 - 我将其分为三个部分:main,main的快捷方式和带有快捷方式的插件。我只是不知道如何检查插件是否已经安装/正在安装,而我可以将插件置于main快捷方式的状态。当然有一个变量吗?该文档非常简明扼要。     
已邀请:
如果我正确理解了该问题,除非安装了MIDDLEMAN.EXE,否则MAIN.EXE将获得一个快捷方式。在这种情况下,MIDDLEMAN.EXE将获得快捷方式。 这是一个奇怪的问题,因为一个组件的存在会更改另一个组件的定义。仍然可以做到。我要做的方法是为MIDDLEMAN.EXE创建一个组件并定义它的快捷方式。为MAIN.EXE创建另一个组件,不要定义它的快捷方式。 然后编写一个自定义操作,该操作在文件成本核算后立即执行的即时执行中按执行顺序运行。请检查是否未安装MIDDLEMAN.EXE并且未安装。如果是这样,请向ShortCut表中写入一个临时行,以定义MAIN.EXE的ShortCut。 从那里,您可以让MSI处理其余部分,而无需执行延迟的自定义操作来处理快捷方式的服务。 不过,我仍然不禁要问,是否无法通过更改应用程序的设计来简化此过程。基本上,您尝试在EXE级别进行依赖项注入,并且在DLL级别更容易完成此操作。换一种说法: 使用ShortCut的MAIN.EXE 可选的DLL MAIN.EXE总是被调用,但是当存在Optional.DLL时,他的行为会有所不同。     
假设安装中包括默认组件,则您可以为\'extra \'组件使用组件条件。然后,您可以确保仅在没有其他组件的情况下才安装此额外的组件,即它们变得互斥。这样可以避免使自定义对话框变得更加复杂的功能混乱。     
@Stephen:我看不到如何避免使用功能,因为只有功能在GUI中对用户可见,因此允许用户指定要安装的功能? 我通常不喜欢这种解决方案,因为它无法根据MSI文件的内部一致性检查程序进行验证,但是您可以将EXE安装在一个组件中,然后将两个组件分别设置为具有不同快捷方式的条件相互排斥。然后,将自定义快捷方式组件附加到触发自定义快捷方式安装的功能。该功能必须设置为在GUI中可见。快捷方式必须是不公开的,因为它们在没有文件的组件中。您可能需要在快捷组件上设置瞬态标志,以允许删除/添加用于维护安装的正确组件。维护安装过程中会重新评估瞬态组件的组件条件,以检查为其指定的条件是否会触发拆卸/添加。     

要回复问题请先登录注册