修复程序

时间:2017-03-08 22:35:50

标签: windows-installer custom-action

我有一个Visual Studio Installer(VS 2010)项目,其中包含一个自定义操作,用于验证用户是否在安装期间在其中一个UI文本框中输入了值。如果该值不存在,则会显示错误消息并停止安装。一切正常。

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

1 个答案:

答案 0 :(得分:0)

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

虽然你可以用后者记录大部分问题(只告诉他们用你的值设置什么属性),但很难抑制自动修复。因此,您必须检测自动修复并仅修改您的方法(我对REINSTALLMODE的模糊记忆包括其他地方很少建议的p,或修改您的一般方法以不需要此值在维护期间输入。

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

无论你做什么,都不要忘记处理基本和无声的UI案例。对于第一次安装,特别是最好具有该值的默认回退,或者显式检查它,记录详细消息,以便用户可以确定发生了什么,并中止安装。如果实际需要该值,则相同的方法应该适用于其他调用。在安装程序时要小心中止;破坏自动修复或卸载都是糟糕的经历。