1

我正在开发一个安装程序项目,该项目由一个 MSI 文件和一个管理先决条件的引导应用程序组成;由于对某些先决条件的需求取决于用户选择安装的功能,因此引导应用程序还提供了 UI。当用户想要运行修改安装时,我希望能够强制添加/删除程序(或程序和功能)控制面板 (ARP) 运行引导应用程序而不是 MSI。我尝试将安装程序的卸载注册表项下的 ModifyPath 值更改为引导应用程序的路径,但无济于事。单击 ARP 中的更改按钮仍然可以获得 MSI。

有没有一种简单的方法可以做我想做的事?如果做不到这一点,MSI 有没有办法使用“更改”按钮检测到它是从 ARP 运行的,以便我可以让它显示一条错误消息,告诉用户运行引导应用程序?(即,ARP 是否使用与用户运行 MSI 并指定修改安装相同的命令行参数,而无需查看 UI 的维护页面?如果没有,我应该寻找什么?)

编辑我的安装程序不仅要安装一个应用程序,而且要安装一套应用程序,每个用户都可以选择不安装。(我们将这些应用程序作为一个套件安装,因为它们中的大多数都依赖于其中一个被安装。因此,用户更容易让一个安装程序处理它们,而不是单独的安装程序这个新的安装程序将取代。)

套件中的应用程序并不都需要相同的先决条件集,因此,MSI 很难检查先决条件,直到它知道用户想要安装套件中的哪些应用程序。此外,我们希望通过自动启动用户确实希望安装的应用程序的所有先决条件的安装程序来简化用户。(这是安装程序的 UI 在引导应用程序中实现的主要原因。)

MSI 是否有可能启动引导应用程序,然后在引导应用程序继续运行时立即静默退出,最终重新启动 MSI?(当引导应用程序启动 MSI 时,它传递给 MSI 的命令行参数之一是一个属性,告诉它引导应用程序启动了它。除其他外,这目前用于允许 MSI 显示错误消息告诉用户运行引导应用程序,除非在命令行上指定了卸载或修复安装。)

4

3 回答 3

1

添加/删除程序只会运行您的 MSI,不支持查找或运行任何引导程序应用程序。

您可以(并且应该)做的是将先决条件检查添加到您的 MSI,而不管它是如何运行的。这样,您可以警告用户他们正在要求目前无法完成的事情(添加尚未具备其先决条件的功能)。

如果缺少先决条件,您可以添加一条有关运行引导程序的消息。

于 2009-03-26T19:46:21.637 回答
0

通过让 MSI 为我启动引导应用程序,我能够解决我的困境。我只是编写了一个自定义操作来启动引导应用程序并且不等待它完成。最初,我尝试将自定义操作放入 UI 序列中,但我无法在不以这种方式生成错误的情况下结束安装。

因为我的目标是只为修改安装运行引导程序,所以我在维护对话框的下一步按钮上放置了几个新的控制事件(用户可以在修改、修复和删除之间进行选择)。如果用户选择了维护 (MaintenanceMode ~= "Modify"),则启动自定义操作,并使用带有 Exit 作为参数的 EndDialog 操作关闭对话。(我将进入下一个对话框的现有控制事件的条件修改为导致启动引导程序的事件的否定条件,即 NOT (MaintenanceMode ~= "Modify")。)引导程序应用程序被编程为跳过其 GUI 中的维护对话并从序列中的下一个对话开始,尽管如果用户愿意,则允许返回到维护对话。(如果他这样做,

I know, it's a bit of a kludge, but it does what I need it to do. :-)

于 2009-04-30T17:47:51.257 回答
0

I know it's late, however Brad Heath does have some comments about this http://blogs.msdn.com/b/heaths/archive/2005/08/16/a-reason-for-arpsystemcomponent.aspx

于 2011-06-03T14:30:04.690 回答