在MSI中自定义修复选项

时间:2009-07-30 12:33:27

标签: installer windows-installer setup-project visual-studio-setup-proje

我有一个非常基本的Visual Studio安装项目,除了一个修改。我根据用户的选择安装了两个不同的库。我为文件添加了一个复选框屏幕和条件。他们可以安装组件或两个组件。一切正常。

现在符合我的要求。假设用户安装了MSI并且只选择了一个组件。现在,他们需要从同一个MSI安装第二个组件。如果他们再次运行MSI,我可以选择修复或删除。修复只会修复最初安装的组件。如何通过再次显示复选框屏幕为他们提供安装其他组件的选项?

如果VS安装项目中没有此功能,那么还有其他内容吗? WiX也许?

2 个答案:

答案 0 :(得分:1)

我认为VS安装项目不支持此功能。从其他工具(如Installshield)创建的Wix或MSI可以支持此功能。处理此问题的常用方法是创建单独的功能并为每个功能分配不同的组件。然后,如果使用WiX或其他工具构建MSI,则可以通过“添加/删除”更改按钮/选项来获取修复,修改或卸载选项。然后,修改可让您更改功能选择,而无需重新安装。

答案 1 :(得分:1)

您需要使用免费的MSI编辑器,如ORCA或SuperORCA。 Microsoft用于在其Service Pack中提供ORCA工具。不确定他们是否继续如此。您可以在http://www.pantaray.com/msi_super_orca.html找到SuperORCA工具。现在当我有类似的任务来实现以下是我的方法。我使用SuperOrca打开我的MSI文件。 1]在修复/删除MSI对话框屏幕时,为“修改”添加一个单选按钮 - 在SuperOrca中 - >在RadioButton表下 - >添加修改单选按钮

的条目

2]将BackButton的文本重命名为原来的“Back”中的“Reinstall” - >在SuperOrca中 - >在控制表下 - >更改Text属性以重命名返回重新安装

3]选择修复/删除单选按钮启用完成按钮并禁用重新安装按钮。选择修改单选按钮启用重新安装按钮并禁用完成按钮 - 在SuperOrca中 - >在ControlCondition表下 - >为修复/删除屏幕的每个组合添加启用/禁用“重新安装”和“完成”按钮的条目(在我的案例对话框中,名称为“MaintananceForm”)

4]现在从SuperOrca工具ControlEvent表中找出BackButton的控制名称,在我的例子中它是“PreviousButton”。现在修改它的Event,Argument&表中的条件条目。对于MSI文件的欢迎屏幕中的“下一步”按钮属性,这些属性的值必须相同,该文件重定向用户以显示要选择的安装选项。

注意:这对我来说很好。但是当您再次重新选择安装选项并单击“下一步”时,它不会强制安装所选选项。相反,它修复了MSI。我尝试从Windows \ Installer文件夹中删除条目,以便MSI不会选择已兑现的已安装版本,但没有运气。如果有人在如何通过MSI设置向导强制MSI重新安装,请告诉我。