0

我的应用程序包含一个可选组件,其快捷方式取代了默认安装提供的快捷方式。如果未安装此可选附加功能,我无法弄清楚如何使其仅安装默认快捷方式 - 还是我只需要给它们两个相同的名称并希望最好?这需要通过自定义安装树以及常规按钮来工作。

看看它的工作方式是,如果在安装时选择了这个额外的,主应用程序的开始菜单快捷方式必须指向这个,它会在需要时自行打开主应用程序。

我正在使用 InstallShield 2011 Professional。

编辑:澄清一下-我确实将它分为三个组件:主要,主要的快捷方式和带有快捷方式的插件。我只是不知道如何检查插件是否已经/正在以一种我可以将其置于主要快捷方式的条件的方式安装。当然有一个变量吗?文档非常简陋。

4

3 回答 3

1

如果我正确理解了这个问题,除非正在安装 MIDDLEMAN.EXE,否则 MAIN.EXE 会获得一个快捷方式。在这种情况下 MIDDLEMAN.EXE 获得快捷方式。

这是一个奇怪的问题,因为一个组件的存在会改变另一个组件的定义。尽管如此,还是可以做到的。我这样做的方法是为 MIDDLEMAN.EXE 创建一个组件并定义它的快捷方式。为 MAIN.EXE 创建另一个组件,不要定义它的快捷方式。

然后编写一个自定义操作,该操作在文件成本计算后立即执行的执行序列中运行。让它检查 MIDDLEMAN.EXE 是否未安装且未安装。如果这是真的,请向 ShortCut 表中写入一个临时行以定义 MAIN.EXE 的 ShortCut。

从那里您可以让 MSI 处理其余部分,而无需延迟自定义操作来处理快捷方式的服务。

尽管如此,我还是不禁想知道这是否不能通过改变应用程序的设计来简化。基本上,您正在尝试在 EXE 级别进行依赖注入,而在 DLL 级别完成此操作会更容易。换句话说:

带有快捷方式可选 DLL 的 MAIN.EXE

MAIN.EXE 总是被调用,但当 Optional.DLL 存在时他的行为会有所不同。

于 2011-05-01T12:45:24.330 回答
0

假设默认组件包含在安装中,您可能可以为您的“额外”组件使用组件条件。然后,您可以确保仅在其他组件未安装时才安装此额外组件,即它们相互排斥。这将避免任何使您的自定义对话框更加复杂的功能。

于 2011-04-29T21:28:58.327 回答
0

@Stephen:我看不出如何避免使用功能,因为在 GUI 中只有功能对用户可见,因此允许用户指定要安装的内容?

我通常不喜欢这种解决方案,因为它不会根据 MSI 文件的内部一致性检查器进行验证,但是您可以将 EXE 安装在一个组件中,然后有两个组件,每个组件都有不同的快捷方式,您可以相互调整独家的。然后将自定义快捷方式组件附加到触发安装自定义快捷方式的功能。该功能必须在 GUI 中设置为可见。快捷方式必须是非广告的,因为它们位于没有文件的组件中。您可能需要在快捷方式组件上设置瞬态标志,以允许删除/添加正确的组件以进行维护安装。瞬态组件在维护安装期间重新评估其组件条件,以检查为它们指定的条件是否会触发移除/添加。

于 2011-04-30T03:19:08.037 回答