如何让ARP运行我的安装程序的bootstrap应用程序进行修改安装?

时间:2009-03-25 19:02:05

标签: windows-installer arp

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

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

编辑我的安装程序不仅安装了一个应用程序,还安装了一套应用程序,每个应用程序都允许用户选择不安装。 (我们将这些应用程序作为套件安装,因为大多数应用程序特别依赖于其中一个应用程序。因此,用户只需要一个安装程序就可以处理所有应用程序,而不是单独的安装程序。这个新的安装程序将替换。)

套件中的应用程序并不都需要相同的先决条件集,因此,在知道用户想要安装的套件中的哪些应用程序之前,MSI检查先决条件并不容易。此外,我们希望通过让用户希望安装的应用程序的所有先决条件的安装程序自动启动,使用户更容易。 (这是安装程序的UI在引导程序中实现的主要原因。)

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

3 个答案:

答案 0 :(得分:1)

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

您可以(而且应该)做的是将先决条件检查添加到MSI,无论其运行方式如何。这样你可以警告用户他们正在要求当前无法完成的事情(添加一个没有先决条件的功能)。

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

答案 1 :(得分:0)

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

由于我的目标是仅为修改安装运行引导程序,因此我在维护对话框的“下一步”按钮上放置了几个新的控件事件(用户在“修改”,“修复”和“删除”之间选择)。如果用户选择了维护(MaintenanceMode~ =“修改”),则启动自定义操作,并使用EndDialog操作以Exit作为参数取消对话。 (我修改了现有控制事件的条件,转到下一个对话框,导致引导程序被启动,即NOT(MaintenanceMode~ =“Modify”)。)引导程序应用程序被编程为跳过其GUI中的维护对话框并从序列中的下一个对话开始,但如果用户选择,则允许用户返回维护对话框。 (如果他这样做,引导程序应用程序只会回到维护对话框的版本,它看起来与MSI中的版本非常相似。)

我知道,它有点像kludge,但它做了我需要它做的事情。 : - )

答案 2 :(得分:0)

我知道现在已经很晚了,但布拉德希思对此有一些评论 http://blogs.msdn.com/b/heaths/archive/2005/08/16/a-reason-for-arpsystemcomponent.aspx