Windows installer 如何让ARP运行我的安装程序';s的引导应用程序是否用于修改安装?

Windows installer 如何让ARP运行我的安装程序';s的引导应用程序是否用于修改安装?,windows-installer,arp,Windows Installer,Arp,我正在进行一个安装程序项目,该项目由一个MSI文件和一个管理先决条件的引导应用程序组成;由于对某些先决条件的需要取决于用户选择安装的功能,因此bootstrap应用程序还提供了UI。当用户想要运行修改安装时,我希望能够强制添加/删除程序(或程序和功能)控制面板(ARP)运行引导应用程序,而不是MSI。我已尝试将安装程序的卸载注册表项下的ModifyPath值更改为引导应用程序的路径,但没有效果。单击ARP中的“更改”按钮仍然可以获得MSI 有没有一个简单的方法来做我想做的事?如果失败了,MSI有

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

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

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

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


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

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

无论MSI如何运行,您都可以(也应该)向MSI添加先决条件检查。通过这种方式,您可以警告用户,他们要求的是当前无法实现的功能(添加尚未具备其先决条件的功能)


如果缺少prereq,您可以添加一条关于运行引导程序的消息。

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

无论MSI如何运行,您都可以(也应该)向MSI添加先决条件检查。通过这种方式,您可以警告用户,他们要求的是当前无法实现的功能(添加尚未具备其先决条件的功能)


如果缺少prereq,您可以添加一条关于运行引导程序的消息。

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

因为我的目标是只为修改安装运行引导,所以我在维护对话框的下一个按钮(用户在修改、修复和删除之间进行选择)上放置了两个新的控制事件。如果用户选择了维护(MaintenanceMode~=“Modify”),将启动自定义操作,并使用EndDialog操作和Exit作为参数来取消对话。(我将进入下一个对话的现有控制事件的条件修改为导致启动引导程序的事件的负面条件,即非(MaintenanceMode~=“Modify”)。引导程序应用程序编程为跳过其GUI中的维护对话,并在序列中的下一个对话处启动,尽管允许用户返回维护对话(如果他选择)。(如果他这样做了,bootstrap应用程序只需返回到其维护对话框的版本,它看起来与MSI中的版本非常相似。)


我知道,这有点困难,但它做了我需要它做的事。:-)

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

因为我的目标是只为修改安装运行引导,所以我在维护对话框的下一个按钮(用户在修改、修复和删除之间进行选择)上放置了两个新的控制事件。如果用户选择了维护(MaintenanceMode~=“Modify”),将启动自定义操作,并使用EndDialog操作和Exit作为参数来取消对话。(我将进入下一个对话的现有控制事件的条件修改为导致启动引导程序的条件的负值,即不(MaintenanceMode~=“Modify”)。引导程序编程为跳过Maint