当启动应用程序触发重复、无休止的 Windows 安装程序自我修复时,我该怎么办?

What do I do when launching an application triggers repeating, endless Windows Installer self-repair?

Windows 安装程序自我修复 会给开发人员系统管理员[=]带来问题30=] 和 最终用户 。如果您的 MSI 经验有限,找到解决方案可能会很困难。

这是一个问答式的回答,旨在作为解决自我修复问题的清单。以下是一些常见的问题场景:

  • 重复Windows 每当您在工作站上启动应用程序时,安装程​​序可能会进行自我修复。如何解决这个问题,或者如何禁用组件以使其不再发生?
  • 可能会部署 WiX 安装程序,并且每当您尝试启动该应用程序时,您都会看到重复的 Windows 安装程序自我修复。
  • 启用或安装 MS Office 插件时,您会遇到 Windows 安装程序在启动一个或多个 MS Office 应用程序时进行持续自我修复。
  • 在 VB6 或 VBA 中处理遗留解决方案时,当您启动主要开发人员 IDE。
  • 时,将对不相关的产品进行自我修复
  • 在 Outlook、Excel 或 Word 或类似应用程序中打开表单时,会针对其他供应商的不相关产品启动自我修复。

关键字:Windows 安装程序意外启动。 MSI 意外显示。 Windows 安装程序每次都会出现。打开应用程序启动 Windows 安装程序。 Windows 安装程序自我修复。包裹如何自我修复。 MSI 自我修复最佳实践。 Windows安装程序修复。自我修复。禁用 Windows 安装程序。 Windows 安装程序重复运行。应用程序快捷方式改为启动安装程序。 Windows安装程序意外出现。

Self-Repair, Simple & Short Explanation: Why does the MSI installer reconfigure if I delete a file?


WiX/MSI 文件的具体设计建议

我一直试图写关于为开发人员重复 MSI self-repair,但最终写得太多了。这是我最后一次尝试:

下面的答案提供了一个清单来解决任何self-repair场景 - 来自任何供应商或来源,而不仅仅是您的自己的。查看上面 link 的答案,了解您自己的 MSI 封装设计问题。

"Short Version" - Self-Repair 清单

要为每个人永久可靠地修复 self-repair 问题,开发人员设置开发人员 必须参与,因为真正的修复必须发生在供应商级别。

如果您处于 企业环境,poor-quality 应用程序 re-packaging 也可能导致 self-repair 问题,您应该涉及您的 application packagers 以确定问题是否来自供应商。

系统管理员 必须知道他们在看什么,当没有可用的修复程序时,使用各种变通方法在野外处理问题。甚至 最终用户 也可以自己尝试一些简单的解决方法(请参阅第 5 节)。

self-repair问题的本质:

  • 大多数 self-repair 问题是 COM-related,两个一般修复 供应商开发人员:1) 使用通常通过合并模块部署的正确部署的共享 COM 库,或 2) 使用 registration-less COM 到 "shield" 您的应用程序 self-repair和兼容性问题。
    • 您的设置开发者可以实现合并模块修复,开发者必须测试。合并模块是用于共享文件的标准化共享部署库。
    • Registration-less COM 仅在 开发人员参与 的情况下才能工作。如果开发人员需要使用 COM 文件的 特定版本 (无论出于何种原因),此选项尤其重要。详情见下文第 5.4 节。
  • 除了 COM,您还可以通过让 setup 开发人员 注册 file-MIME-associations 命令动词 在您的 MSI 设置 中。谨慎使用,并确保您的 file-/MIME 关联是唯一的。
  • 最后,两个已安装的 MSI 文件之间的任何文件或注册表冲突都可能导致 self-repair。他们“错误地共享资源”并将其视为自己的资源 - 与之抗争直到冲突解决。
  • 一些 self-repair 问题根本不是由供应商应用程序或设置中的错误引起的,而是由相关计算机环境中的外部因素引起的,例如来自修补用户、脚本、病毒的干扰,anti-viruses 或安全软件。有关详细信息,请参阅第 3 部分。

处理问题应用程序的快速选项

如果您确定 self-repair 您可以直接跳到 第 5 节 以获得 建议修复和解决方法列表 看到是由 MSI 单独引起的(而不是由下面前几节中描述的其他外部原因引起的)。

第 5 节中提出的大多数 "solutions" 实际上主要是 系统管理员技巧 ,它们不能解决根本问题 - 如上所述,真正的修复必须来自供应商。例外是“5.4: registration-less COM”,它实际上可以帮助 开发人员 "shield" 他们的应用程序解决 self-repair 问题。

如果您没有您的盒子的管理员权限,建议您尝试"solutions" 5.2, 5.35.1(5.1一般会需要管理员权限才能试,不过是non-complicated)。这些是“快速解决方法”,其他的涉及更多。如果这些解决方法不起作用,请让您的管理员阅读其他建议。

了解Windows安装程序Self-Repair

我之前已经写过关于这个问题的详细文章,但是它过于关注理解问题而不是实际找到可接受的解决方案。您可以在此处阅读 self-repair 问题的完整解释:How can I determine what causes repeated Windows Installer self-repair?.

修复 Windows 安装程序 Self-Repair 问题

要真正解决重复和无休止的问题 self-repair,您可以尝试下面第 5 部分中的建议 - 按照复杂性和难度的递增顺序。在这样做之前,您应该验证 self-repair 问题的真正根源是什么。它可能不是由 MSI 文件引起的,而是由其他外部原因引起的(例如 脚本或用户删除文件 anti-virus 阻止文件 ).

如果确实是 MSI-related 问题,您可以尝试 禁用广告快捷方式 COM 插件 , 使用registration-less COM从应用程序供应商处获得帮助卸载有问题的应用程序虚拟化包或完全破解缓存的MSI数据库和注册表(不推荐,只有在专家帮助下才真正可行).这完全取决于您的情况。如果脚本等外部原因有问题,则必须排除这种干扰。请参阅下面的详细信息 - 只需遵循 check-list.

解决问题的第一步是确定问题确实存在于您的平台上,然后确定首先触发 self-repair 的应用程序:

1。 确认问题确实存在于您的环境中

  • 通常总是有可能弄清楚是怎么回事导致问题self-repair,并且有几个可行的变通办法 可以用来解决这个问题。然而,并非总能找到一个好的、永久的修复程序(没有供应商的帮助——如下所述)。
    • 因此,如果您是一名系统管理员,正在尝试为您的 self-repair 问题寻找解决方案,或许可以确保该问题出现在不止一台计算机上 - 特别是如果该问题出现在 developer-, QA- 甚至 test computer.
    • 如果您只在一台计算机上看到 self-repair 问题,另一种方法可能是 重建有问题的计算机 。有效地消除而不是 "solving" 问题。不过,风险相对较高,您可能会再次看到问题。如果你问我,不要重建,这不是解决方案 - 但我想在现实世界中往往会做些什么。
  • 请注意,AD-advertised MSI 安装安装缓慢并且不断中止用户 可以 "look like" 桌面支持的 self-repair 问题,但这是预期的 MSI 行为。允许安装完成一次(可以更改安装程序进度条以禁用取消按钮 - 类似 msiexec.exe /I "MyApp.msi" /QB-! 的进度条只有没有取消按钮,最后也没有模态对话框)。

2。 找出 self-repair.

的罪魁祸首
  • 单个应用程序可能会自行导致问题,但通常至少有两个应用程序发生冲突(他们错误地共享了一些资源)。
  • self-repair 触发器通常可以在 事件查看器 中找到 self-repair 发生了。按照以下步骤打开事件查看器:
    • 右击"My Computer"
    • 单击管理
    • 如果出现 UAC 提示,请单击继续
    • 转到“事件查看器”部分,检查 Windows 日志
  • 通过查看事件日志的“应用程序部分”,在Windows事件日志中识别违规应用程序并且您应该从事件源“MsiInstaller”中找到警告,其中 ID 为 10011004
    • 您可以在此处更详尽的答案中找到有关如何执行此操作的更多详细信息:How can I determine what causes repeated Windows Installer self-repair?。查看“寻找 self-repair 的触发器或罪魁祸首”部分。
    • 您也可以尝试 独立部署专家 MSI-expert[=15 的建议=].

3。 验证外部 non-MSI 原因不是导致问题的原因

  • 任何手动或自动删除文件注册表设置的操作都可以触发 MSI self-repair。 特别是当您在删除用户配置文件或注册表的 HKCU 部分中的内容时乱七八糟
    • 在大多数情况下,此类触发器只会导致 单个 self-repair 到 运行 和 ,然后问题得到解决(这就是 self-repair 应该如何工作并帮助用户)。允许 self-repair 到 运行 一次,然后再次启动应用程序以测试问题是否消失。它应该是,您的应用程序应该从现在开始正确启动。
    • 特殊情况:具有讽刺意味的是,有时您可以通过重命名其 HKCU 应用程序密钥(在注册表的用户部分中)来实际强制 self-repair 来修复损坏的应用程序运行 并在用户配置文件中安装应用程序的默认数据 - 如果该数据被意外删除(此类修复通常不适用于终端服务器)。
    • 如果通过自动方式再次删除相同的文件或注册表项并产生 self-repair 结果,您必须消除或更新导致它的自动过程,您的问题就解决了,您可以停止阅读。如果你又自己手动删除了这个文件,那你可能记性不好了:-).
    • 总结清理脚本登录脚本清理应用程序修补、过度活跃的用户都可能导致此问题有点像 self-repair.
  • 最后 病毒anti-virus 软件(和其他安全软件)可以阻止对文件的访问并触发 self-repair永远不会成功
    • 对于受感染的计算机,只需重建计算机即可。整体上会节省您的时间。
    • 对于anti-virus / 安全软件问题,让你的安全人员来解决它。在某些情况下,他们可能需要联系供应商(特别是误报)。
    • 无论是病毒还是 anti-virus 相关,请检查 http://www.virustotal.com 上的违规文件以验证它是否真的是病毒或只是误报(对于 [=773 这可能是一个更大的问题) =]).
    • 我个人见过几个 anti-virus / 安全软件相关的 self-repair 问题,但没有真正的 virus-related 问题(到目前为止)。我猜想病毒通常会感染核心系统文件而不是应用程序文件,并且核心系统文件不会被 MSI 文件部署(共享系统文件可能包含在 MSI 文件中,但不是核心系统文件)。

4。 联系供应商(或您自己的包装部门)。

  • 一旦您确认 self-repair 问题是 MSI-based 而不是您自己的软件,首先要尝试的是 联系应用程序供应商 看看他们是否有 更新的安装程序 来解决问题。
  • 尝试这个选项很重要,因为所有其他选项都是 "workarounds" 而不是真正的修复。该问题只能通过更改供应商安装程序和可能的应用程序可执行文件本身来完全永久解决

    • 修复 1:修复可以很简单,只需让供应商使用适当的共享“合并模块[删除私人安装但全局注册的 COM 文件] =413=]" 为每个人正确安装 run-time。这些应该将 COM 文件正确安装到共享位置,在那里它们可以全局注册而没有副作用。准备好供大家使用。
    • 修复 2:如果供应商声称这是不可能的 - 那么他们应该能够提供正确的 registration-less COM 安装并安装正确隔离的 COM 文件到主应用程序文件夹。他们还应该负责部署任何安全更新。
  • 重要!:如果供应商使用正确的共享合并模块来部署文件提供了使用registration-lessCOM的隔离安装,那么应该为大家永久解决问题

  • 问题也可能是由其他问题引起的,但 COM 通常是罪魁祸首。有时清理他们的 MSI 安装程序可以解决其他更隐蔽的冲突。如果您认识一个好的应用程序打包器,he/she 应该能够快速识别冲突(并为供应商提供反馈)。
  • 请注意,self-repair 也可能是由供应商软件的错误 (in-house) 重新打包引起的。在那种情况下,您可以通过您自己的打包/部署部门提供的更新来修复您自己的包(在大多数情况下,他们绝对应该能够实现这一点)。这实际上是一个非常普遍的问题。

5。 Select一个"workaround"或者修复来处理冲突的情况。

  • 如果厂商不提供固定的安装包,你需要找一个"workaround"来处理这种情况。有多种选择,在您深入研究过于复杂的问题之前,应该尝试一些“快速解决方法”。这里有一些解决问题的建议,按照难度和复杂程度的增加:

    • 5.1:只需卸载罪魁祸首

      • 绝对最简单的解决方法是找出触发 self-repair 的应用程序并卸载它,如果这对您的环境来说是可接受的解决方案(这种情况很少见)。
      • 如果有两个(或更多)应用程序发生冲突并且其中一个应用程序很少使用,或者 "optional".
      • ,这是可以接受的
      • 您可以 运行 虚拟机上的问题应用程序 (请参阅第 5.5 节)。对于非常 "misbehaving" 的应用程序,这将是我的首选 "fix"。所有问题都应该在没有任何真正调试的情况下消失(这是昂贵的)。
      • 简单卸载是一个至少值得考虑的选项 - 某些软件可能在多个方面存在严重问题,应该简单地拒绝使用。一定要让供应商知道该软件也被拒绝了。这可能是让他们承担问题的唯一方法我是认真的。
    • 5.2: 删除广告快捷方式.

      • 第一个 Windows 安装程序解决方法是删除“advertised shortcuts”(本质上是一种指向 Windows 安装程序应用程序功能,而不是直接安装到可执行文件或文件)。阅读 Symantec 的 linked 文章,了解有关广告快捷方式的详细信息。
        • 请注意,可以创建快捷方式 "anywhere",包括在 "Startup" 文件夹等特殊文件夹中。这个特定位置意味着 self-repair 可以在系统启动时自行触发(无需用户交互)。
        • 使用an MSI viewer tool and open the system-cached MSI and inspect its Shortcut table to find all shortcuts. In order to find a list of all cached packages you can try this answer: (打开"LocalPackage"中指定的包路径)
      • 然后您 re-create 一个直接指向相关可执行文件的常规快捷方式。这将 "bypass" 最常见的 self-repair 触发器(广告快捷方式)。在某些情况下,这避免了整个 self-repair 问题。值得一试。
      • 请注意,即使这看起来立即有效,当您在应用程序内部工作时(例如,当您打开特定表单时),self-repair 可能仍会 re-appear。您需要 "pilot" 与一些实际积极使用该应用程序的用户进行此修复,以确保它对您的环境来说是一个足够好的解决方法。
      • 您也只是消除了问题的症状,导致它的注册表或文件冲突只是 "bypassed" 或 "silenced" - 它仍然存在,但是如果应用程序在运行期间没有出现任何问题。
      • 实际上有一种方法可以在安装任何 MSI 包时禁用所有广告的快捷方式。您设置 属性 DISABLEADVTSHORTCUTS(以 link 中描述的方式之一),然后所有快捷方式将被创建为常规快捷方式,它们将不会触发 self-repair。 至少有两个问题
        • 1) 该软件包可以设计为使用 self-repair 安装用户配置文件或 HKCU 设置。在这种情况下,此数据将永远不会按预期添加到系统中,因为 self-repair 永远不会 运行,并且安装实际上是不完整的。
        • 2) 不能保证 self-repair 不会仍然发生 - 因为它可以由其他广告入口点触发,例如 COM 调用、文件和MIME 关联和命令动词。
    • 5.3禁用 COM 插件(如果可能)。

      • 如果您的问题与加载 add-in(对于 Outlook、Excel、Word 或其他应用程序,如 AutoCAD 或类似应用程序)有关,那么就没有调整的捷径 - 插件在其 "host application".
      • 启动时加载
      • 最简单的尝试是 在相关应用程序的插件对话框中禁用您不需要的任何插件(通常是 OutlookExcelWordsimilar) 看看这是否能解决问题。在某些情况下,您只是禁用了用户最初从未使用过的 COM 插件,问题已被消除。
      • 而且,很明显,还要尝试禁用您实际需要的插件,以检查问题是否与其加载有关。如果加载项是罪魁祸首,您应该继续查看下一个建议的解决方案(下一个要点)。
      • 我应该 re-iterate 首选解决方案 将是供应商的修复(通常它会涉及使插件正确使用最新的共享 ActiveX/OCX 有问题的控件 - 如果其他插件的设计也很糟糕,其他插件仍然可能触发问题。您最终可能会与多个供应商打交道 - 通常会互相指责)。
      • 公平地对待供应商,问题也可能由错误的公司应用程序重新打包引起 - 如果您使用的是公司计算机。那你就得找包装部处理了。
    • 5.4:尝试registration-less COM

      • 可以说这个解决方案比虚拟化(在下一个要点中描述)更复杂,但我把它放在这里是因为它可能是某些人的首选。
      • Registration-less COM是我很少用到的,但是据说是一个可行的方案:Generate manifest files for registration-free COM。这实质上绕过注册表并激活由放置在应用程序可执行文件旁边的清单文件控制的 COM 文件的私有副本 - 有效地保护应用程序免受 COM 注册表干扰(理论上)。 "Everything happens in the same folder".
      • 您的 in-house 包装部门 可能 能够使用它来处理 "difficult vendor packages" 到 "isolate" 他们的问题。但是,我不相信 registration-less COM 在没有由原始解决方案 develo 贡献的一些额外的应用程序调整的情况下能够正常工作呃,但我缺乏经验数据来支持它。如果它是一个 in-house 有可用源代码的应用程序,请对其进行测试(并告知我们)。
      • 我使用这种方法的主要问题是它打开了潜在的安全漏洞(COM 文件的私有副本永远不会由 Microsoft 修补),如果您不确定自己是否更新了隔离的组件。更新也可能会导致大量 manifest-rewrite 工作(但是这些旧的 COM 文件是否已经更新了?)
      • 请注意,至少在理论上,registration-less COM 可用于所有与 COM 相关的冲突,无论它们是 VB6 可执行文件、使用 COM 的 VC++ 应用程序等...老实说,我不确定它是否适用于 (office) COM 插件 (dll) 和 VBA 表单。
      • 这似乎是 registration-less COM 上最好的 MSDN 文章之一:https://msdn.microsoft.com/en-us/library/ms973913.aspx(甚至还有一个可下载的 MSI 示例 - 具有讽刺意味的是,它似乎触发了错误我在发射时)。
      • 就我个人而言,我可能宁愿尝试使用 APP-V 的虚拟包,而不是尝试使用 registration-less COM(请参阅下一个要点)。
      • 应该 re-iterated 而不是 "shielding" 您自己的应用程序 - 正确的供应商修复 是停止部署共享 COM 文件的私有副本错误注册的 system-wide,然后使用适当的合并模块进行部署,开始按预期安装它们。
    • 5.5虚拟化(APP-V、虚拟机等)。

      • 除了卸载或禁用组件之外,最简单的解决方法可以说是对发生冲突的应用程序使用虚拟化 "isolate"。如果您仍希望在主 SOE(标准操作环境)上使用应用程序,您可以尝试使用虚拟部署包 (APP-V)。这是一个基本上按需安装(启动时)和 运行s "sandboxed" 或与系统上的其他应用程序隔离的应用程序。
      • 您还可以通过 VMWareMicrosoft Virtual PC 等系统使用虚拟机来 运行 有问题的应用程序(s) 在他们自己的操作系统中。通常人们在使用虚拟机时拥有管理员权限,但在他们的主要 SOE 系统(主工作站)上却没有。许多开发人员应用程序在使用管理员权限时更有效,因此此解决方案在处理开发团队及其需求时可能特别有用。
    • 5.6Windows 安装程序调整 -(仅限专家!).

      • 如果您的桌面环境问题非常严重,并且上述 none 选项有效,您可以尝试 在 Windows 安装程序级别修复问题 。如果插件(或任何其他软件)对于在公司的主要 PC 环境中可用至关重要,那么它可能是值得的。
      • 基本上您需要做的是从系统缓存的 MSI and/or 注册表中删除有问题的条目(禁用广告的入口点,例如广告的快捷方式、COM 注册、文件关联、MIME 关联或命令动词等...)。
        • 这是非常复杂的做法,不是很好的做法,还有一些 side-effects(用于卸载、弹性等...),但这是我所知道的唯一 "last resort"关于.
        • 在这些情况下,建议您联系 部署/Windows 安装程序专家,让他们分析 "fix" 是否可行。它可以工作,但不要指望奇迹。
        • 如果您坚持自己调试,则需要使用工具打开系统上缓存的 MSI 文件 (such as Orca, Installshield, Advanced Installer or similar),并且需要 "hack" 数据库 - 不推荐。
    • 5.7: Windows 安装程序切换 - (不安全!).

      • 为了完整性和“历史目的”,如果您愿意,我将此 "option" 包括在内。这从来都不是一个好的选择,现在在 Windows.
      • 的较新版本上非常不安全
      • MsiZap.exe 是一个 Microsoft SDK 工具,意为 last-resort 开发人员清除失败的 MSI 安装或卸载的工具,它从未打算广泛使用。它允许完整的 "dirty unregistration" 任何 MSI 包。 MsiZap.exe 现在 已弃用 不受支持 不安全 使用。仅在一次性虚拟机上使用,如果有的话。
      • 过去,一个常见的“系统管理员把戏”是使用MsiZap.exe来“zap”来自系统的整个 Windows 安装程序包。除了让您的系统脏到无法治愈之外,它还消除了该应用程序的所有 self-repair 问题。
      • The junk that is left behind after running MsiZap.exe 基本上包括所有内容(除了实际的 MSI 数据库注册)。所有文件、所有注册表项(包括ng COM)、SharedDll 引用计数器(在重新安装时确实搞砸了)、服务,任何东西。您将永远无法正确卸载。在大多数情况下,您将无法安装同一应用程序的升级版本而没有副作用。许多人在尝试在脏状态之上安装时实际上看到了更多 self-repair 问题。
      • Rob Mensching,WiX、Orca 和所有东西的创造者 Windows 安装程序有 a blog post on the perils of MsiZap. MSDN describes another bad side effect: All program update information is removed when you use the Msizap.exe tool to uninstall a program from a Windows-based computer

6. 总结与结论

  • 第 4 步 - 联系供应商进行修复 - 是唯一的“真正的修复“ 在我看来。
    • 所有其他提案都试图解决供应商错误导致的问题,而不是提供持久的解决方案。
    • real-world 问题是许多供应商往往互相指责,所以您可能会倒霉。一些做得对的供应商确实会遭受其他人的设计错误的困扰。
  • 提议5.15.25.3non-complicated解决方法”。
    • 大家试一下应该是安全的。
    • 提议 5.25.3 应该可以尝试 没有管理员权限.
  • 提案 5.4 - registration-less COM - 是一个相当复杂的潜在 "fix"。
    • 可能需要开发人员参与才能找到 "isolate" 的所有相关文件。
    • 根据我的经验,这种项目最终会花费数天的时间来尝试(即使有专家的帮助)——无法真正保证它最终会成功。
    • 我从专家那里听到相互矛盾的说法,有的成功了,有的说失败了。有权访问解决方案源的人似乎成功了。
    • 我个人不喜欢它,因为它会打开潜在的安全漏洞,部署任何新文件版本都可能意味着新一轮的清单 re-authoring(我相信)。
    • 然而,有问题的 COM 文件现在太旧了,它们不太可能看到对它们进行的任何安全更新。我想现在这些 COM 对象主要用于 .NET 互操作。
  • 提案 5.5 - 虚拟化 - 是目前常见的选项,可能应该是如果在环境中可用,请在 5.4 之前尝试。俗话说,“virtualize, seriously”。
    • 老实说,我不知道(缺乏经验)虚拟化对于(办公室)插件是否可行。如果可以确认请更新
    • 可执行文件绝对可以虚拟化。
  • 提案 5.6 - “缓存 MSI 调整” - 是一个“hack”在 部署专家 正确完成后可以工作 "good enough"。
    • 有一些“副作用”,特别是对于 uninstall - 以及 "resiliency",但这些应该是如果做得好,可以管理。
    • 它是 "real world" - 什么都不是 "clean"。
  • 和提案 5.7 - “zapping MSI” - 不安全,已弃用 "legacy hack"。
    • 由于系统的 "dirty state".
    • ,有几个 副作用
    • 在 运行 宁 MsiZap.exe 后报告 MSI 数据库完全损坏。

一定是你的包裹里面有问题。 查找问题。

  1. 清除事件日志 - 应用程序。

  2. 运行 您作为具有 AdminRigths 的用户的应用程序

  3. 应用自修复后应该运行。你可以运行两次,如果没有出现自我修复,当你第二次运行之后,这意味着想要在MachinePart中创建条目的组件有问题,如HKLM或Programfiles或Windows文件夹。

  4. 打开您的事件日志并查找带有源 MSIInstaller 的条目。

  5. 带有警告的条目将为您提供哪些功能和组件会导致自我修复的信息。

如果您可以在此处向我们展示来自那个 warinig 的日志,我们可以告诉您更多有关您的问题的信息,但一般情况下,事件查看器中的消息很清楚,并说明缺少什么资源。

由于每次启动应用程序时都会发生这种情况(我假设您允许修复 运行 完成),最可能的原因是应用程序删除了 "protected" 的内容 Windows Installer,比如一个注册表项或者一个文件。该快捷方式启动修复机制以重新安装丢失的项目,MsiInstaller 条目会告诉您它是什么。

总的来说,维修是一件好事,因为它们允许用户在安装的产品损坏时对其进行维修。如果根据设计,有一些资源已安装但不需要修复,则在您的 WiX 中将组件 ID 设置为空,因为这是防止修复某些文件的记录方式,请参阅此处的 ComponentId 备注:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa368007(v=vs.85).aspx