Windows installer 修复程序时显示安装程序UI

Windows installer 修复程序时显示安装程序UI,windows-installer,custom-action,Windows Installer,Custom Action,我有一个VisualStudio安装程序(VS 2010)项目,其中包含一个自定义操作,用于验证用户在安装过程中是否已在其中一个UI文本框中输入值。如果该值不存在,则会显示错误消息并停止安装。这一切都很好 当用户进入程序和功能并试图修复应用程序时,就会出现问题。他们看到需要该值的错误,无法继续。我想我要做的是在修复时显示UI,并让用户有机会输入值。这可能吗?是否有其他方法让他们成功完成维修过程?您不能使中的“维修”按钮显示超过个字符。您可以将属性设置为1以隐藏按钮,这将要求用户输入维护(通常通过

我有一个VisualStudio安装程序(VS 2010)项目,其中包含一个自定义操作,用于验证用户在安装过程中是否已在其中一个UI文本框中输入值。如果该值不存在,则会显示错误消息并停止安装。这一切都很好


当用户进入程序和功能并试图修复应用程序时,就会出现问题。他们看到需要该值的错误,无法继续。我想我要做的是在修复时显示UI,并让用户有机会输入值。这可能吗?是否有其他方法让他们成功完成维修过程?

您不能使中的“维修”按钮显示超过个字符。您可以将属性设置为1以隐藏按钮,这将要求用户输入维护(通常通过修改或更改按钮)以从程序和功能执行此类操作。但是,自动修复仍将使用基本UI,用户可以使用msiexec的适当参数调用命令行中的任何内容

虽然您可以用文档记录解决后者的大多数问题(只需告诉他们用您的值设置什么属性),但自动修复很难抑制。因此,要么您必须检测自动维修,然后修改方法(我模糊地记得包含
p
,这在别处很少被建议),要么修改您的一般方法,以便在维护期间不需要输入此值

在不知道这个值是什么或它的用途的情况下,我会尝试性地建议最后一种方法,因为它简单且惯用。在首次安装期间接受此值并将其存储在注册表中,并在维护操作期间从注册表中读取。如果他们在完整UI中或从命令行运行维护,可以选择让他们输入(覆盖)它。如果这是一个配置属性,那么这几乎肯定是正确的选择。如果它更像是一个“密码”,这是值得怀疑的,但我认为你应该更信任Windows对管理访问的保护,而不是你可以在MSI中实现的任何密码方案

无论您做什么,不要忘记处理基本的和静默的UI案例。特别是对于第一次安装,最好为该值设置默认回退,或者显式检查该值,记录详细消息,以便用户可以确定发生了什么,并中止安装。如果实际需要该值,那么同样的方法也适用于其他调用。只是要小心在程序已经安装时中止;损坏的自动修复或卸载都是可怕的经历