【问题标题】:What do I do when launching an application triggers repeating, endless Windows Installer self-repair?当启动应用程序触发重复、无休止的 Windows Installer 自我修复时,我该怎么办?
【发布时间】:2018-01-24 17:55:59
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: wix windows-installer virtualization comaddin


    【解决方案1】:

    自我修复,简单简短的说明Why does the MSI installer reconfigure if I delete a file?


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

    我一直在尝试写关于为开发人员重复 MSI 自我修复,但最终写得太详细了。这是我的最后一次尝试:concrete design advice for what not to do in your WiX / MSI file

    下面的答案提供了一个用于解决任何自我修复方案的清单 - 来自任何供应商或来源,而不仅仅是您自己的。检查上面链接的答案,了解您自己的 MSI 封装设计问题。

    “短版” - 自我修复清单

    为了永久可靠地为每个人解决自我修复问题,开发人员设置开发人员必须参与,因为真正的修复必须在供应商级别进行。

    如果您处于企业环境,质量差的应用重新打包也会导致自我修复问题,您应该让您的应用打包人员来确定是否问题出在供应商与否。

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

    自修复问题的本质

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

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

    如果您确定您看到的自我修复仅由 MSI 引起(而不是由其他外部原因,如下文前几节所述)。

    第 5 节中提出的大多数“解决方案”实际上大多是系统管理员技巧,不能解决根本问题 - 如上所述,真正的解决方案必须来自供应商。例外是“5.4:无注册 COM”,它实际上可以帮助开发人员“保护”他们的应用程序免受自我修复问题。

    如果您您的盒子没有管理员权限,建议您尝试“解决方案”5.25.3 5.1(5.1一般需要管理员权限才能尝试,但并不复杂)。这些是“快速解决方法”,其他涉及更多。如果这些解决方法不起作用,请让您的管理员阅读其他建议。

    了解 Windows Installer 自我修复

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

    修复 Windows Installer 自我修复问题

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

    如果问题确实与 MSI 有关,您可以尝试禁用广告快捷方式COM插件使用免注册COM从应用程序供应商处获得帮助卸载有问题的应用程序虚拟化软件包或完全破解缓存的 MSI 数据库和注册表(不推荐,只有在专家帮助下才可能)。这完全取决于您的情况。如果脚本等外部原因出现故障,则必须消除这种干扰。请参阅下面的详细信息 - 只需按照清单进行操作即可。

    解决问题的第一步是确定问题确实存在于您的平台上,然后首先确定哪些应用程序触发了自我修复:

    1。 验证您的环境中确实存在问题

    • 通常总是有可能找出原因导致有问题的自我修复,并且有几种可行的解决方法可以用来解决问题。然而,并不总是能够找到一个好的、永久的修复(没有供应商的帮助 - 如下所述)。
      • 因此,如果您是一名系统管理员,试图为您的自我修复问题寻找解决方案,也许要确保该问题出现在多台计算机上 - 特别是如果该问题出现在 开发人员身上-、QA- 甚至是测试计算机
      • 如果您只在一台计算机上看到自我修复问题,则替代方法可能是重建有问题的计算机。有效地消除而不是“解决”问题。不过,您可能会再次看到问题,但存在相对较高的风险。如果你问我,不要重建,这不是解决方案 - 但我猜在现实世界中往往会这样做。
    • 请注意,安装缓慢不断被用户中止广告宣传的 MSI 安装可能“看起来像”桌面支持的自我修复问题,但这是预期的 MSI 行为。允许安装完成一次(可以更改安装程序进度条以禁用取消按钮 - 类似于 msiexec.exe /I "MyApp.msi" /QB-! 仅用于进度条,没有取消按钮,最后没有模式对话框)。

    2。 找出肇事者进行自我修复。

    • 单个应用程序可能会自行导致问题,但通常至少有 两个应用程序发生冲突(它们错误地共享某些资源) .
    • 自修复触发器通常可以在发生自修复的系统上的事件查看器中找到。按照以下步骤打开事件查看器:
      • 右键单击“我的电脑”
      • 点击管理
      • 如果收到 UAC 提示,请单击继续
      • 转到事件查看器部分,然后检查 Windows 日志
    • 通过查看事件日志的“应用程序部分”,在 Windows 事件日志中识别有问题的应用程序,您应该会发现来自事件源的警告“MsiInstaller”,ID 为 10011004

    3。 确认外部非 MSI 原因不会导致问题

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

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

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

      • 修复 1:修复可以简单到让供应商使用适当的共享“合并模块”删除私人安装但全局注册的 COM 文件以安装运行时对每个人都正确。这些应该将 COM 文件正确安装到共享位置,在这些位置可以全局注册而不会产生副作用。可供所有人使用。
      • 修复 2:如果供应商声称这是不可能的 - 那么他们应该能够提供正确的免注册 COM 安装,并将正确隔离的 COM 文件安装到主应用程序文件夹。他们还应该注意随时部署任何安全更新。
    • 重要提示!:如果供应商使用正确的共享合并模块来部署文件使用免注册COM,那么这个问题应该为大家永久解决

    • 问题也可能是由其他问题引起的,但 COM 往往是罪魁祸首。有时清理他们的 MSI 安装程序可以解决其他更模糊的冲突。如果您认识一位优秀的应用程序打包者,他/她应该能够快速识别冲突(并为供应商提供反馈)。
    • 请注意,自我修复也可能是由供应商软件的错误(内部)重新打包引起的。在这种情况下,您可以通过您自己的打包/部署部门提供的更新来修复自己的包(在大多数情况下,他们肯定能够实现这一点)。这实际上是一个非常普遍的问题。

    5。 选择“解决方法”或修复来处理冲突情况。

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

      • 5.1:只需卸载罪魁祸首

        • 绝对最简单的解决方法是找出哪些应用程序触发了自我修复,然后卸载它,如果这对您的环境来说是可接受的解决方案(很少是这样)。
        • 如果有两个(或更多)应用程序发生冲突,并且其中一个应用程序很少使用或“可选”,这是可以接受的。
        • 您可以改为在虚拟机上运行问题应用程序(请参阅第 5.5 节)。对于非常“行为不端”的应用程序,这将是我首选的“修复”。所有问题都应该在没有任何实际调试的情况下消失(代价高昂)。
        • 普通卸载是一个至少值得考虑的选项 - 某些软件可能存在多个方面的问题,应该直接拒绝使用。请务必让供应商知道该软件也被拒绝。这可能是让他们认真对待问题的唯一方法。
      • 5.2删除广告快捷方式

        • 第一个尝试的 Windows Installer 解决方法是删除“advertised shortcuts”(本质上是一种特殊类型的快捷方式,它指向 Windows Installer 应用程序功能,而不是直接指向可执行文件或文件) .阅读 Symantec 的链接文章,了解有关广告快捷方式的详细信息。
          • 请注意,可以在“任何地方”创建快捷方式,包括在“启动”文件夹等特殊文件夹中。此特定位置意味着可以在系统启动时自行触发自我修复(无需用户交互)。
          • 使用an MSI viewer tool 并打开系统缓存的 MSI 并检查其快捷方式表以查找所有快捷方式。为了找到所有缓存包的列表,您可以尝试以下答案:How can I find the product GUID of an installed MSI setup?(打开“LocalPackage”中指定的包路径)。
        • 然后您重新创建一个直接指向相关可执行文件的常规快捷方式。这将“绕过”最常见的自我修复触发器(宣传的快捷方式)。在某些情况下,这可以避免整个自我修复问题。值得一试。
        • 请注意,即使这看起来可以立即工作,但在您在应用程序中工作时(例如,当您打开特定表单时),自我修复可能仍会重新出现。您需要与一些实际积极使用该应用程序的用户一起“试点”此修复程序,以确保它对于您的环境来说是一个足够好的解决方法。
        • 您也只是消除了问题的症状,导致它的注册表或文件冲突只是被“绕过”或“静默” - 它仍然存在,但如果应用程序在运行期间没有出现问题,这可能就足够了操作。
        • 实际上有一种方法可以在安装任何 MSI 软件包时禁用所有宣传的快捷方式。您设置属性DISABLEADVTSHORTCUTS(以链接中描述的方式之一),然后所有快捷方式将被创建为常规快捷方式并且它们不会触发自我修复。 至少有两个问题
          • 1) 该软件包可以设计为使用自我修复来安装用户配置文件或 HKCU 设置。在这种情况下,这些数据将永远不会按预期添加到系统中,因为自我修复永远不会运行,并且安装实际上是不完整的。
          • 2) 无法保证不会发生自我修复 - 因为它可能由其他公布的入口点触发,例如 COM 调用、文件和 MIME 关联以及命令动词。
      • 5.3禁用 COM 插件(如果可能)。

        • 如果您的问题与加载 加载项(适用于 Outlook、Excel、Word 或其他应用程序,如 AutoCAD 或类似应用程序)有关,则无需调整快捷方式 - 加载项是在启动其“宿主应用程序”时加载。
        • 最简单的尝试是在相关应用程序的插件对话框中禁用任何不需要的插件(通常是OutlookExcelWordsimilar),看看这是否能解决问题。在某些情况下,您只是禁用了用户一开始从未使用过的 COM 插件,问题就已经解决了。
        • 而且,很明显,还要尝试禁用您实际需要的插件,以检查问题是否与加载有关。如果插件是罪魁祸首,您应该继续检查清单,直到下一个建议的解决方案(下一个要点)。
        • 我应该重申首选解决方案将是来自供应商的修复(通常会涉及使插件正确使用有问题的最新共享 ActiveX/OCX 控件 - 其他插件但是,如果它们的设计也很糟糕,仍然可能引发问题。您最终可能会与多个供应商打交道 - 通常相互指责)。
        • 为了对供应商公平起见,问题也可能是由糟糕的公司应用程序重新打包引起的 - 如果您使用的是公司计算机。然后,您必须与包装部门打交道以进行修复。
      • 5.4:尝试无注册 COM

        • 可以说这个解决方案比虚拟化更复杂(在下一个要点中描述),但我把它放在这里是因为它可能是某些人的首选。
        • 无注册 COM 是我很少使用的东西,但据说它是一个可行的解决方案:Generate manifest files for registration-free COM。这实质上绕过了注册表并激活了由位于应用程序可执行文件旁边的清单文件控制的 COM 文件的私有副本 - 有效地屏蔽了应用程序免受 COM 注册表干扰(理论上)。 “一切都发生在同一个文件夹中”。
        • 您的内部包装部门可能能够使用它来处理“困难的供应商包”以“隔离”他们的问题。但是,如果没有原始解决方案开发人员提供的一些额外的应用程序调整,我不相信无注册 COM 将正常工作,但我缺乏经验数据来支持它。如果它是具有可用源的内部应用,请对其进行测试(并告知我们)。
        • 我对这种方法的主要问题是,如果您不这样做,它会打开 潜在的安全漏洞(Microsoft 永远不会修补的 COM 文件的私有副本) '不要确保自己更新隔离的组件。更新也可能会导致大量清单重写工作(但这些旧的 COM 文件是否已经更新了?)
        • 请注意,至少在理论上,无需注册的 COM 可用于所有与 COM 相关的冲突,无论它们是 VB6 可执行文件、使用 COM 的 VC++ 应用程序等...老实说,我不确定它是否适用于(office) COM 插件 (dll) 和 VBA 表单。
        • 这似乎是 MSDN 关于无注册 COM 的更好文章之一):https://msdn.microsoft.com/en-us/library/ms973913.aspx(甚至还有一个可下载的 MSI 示例 - 具有讽刺意味的是,这似乎在启动时触发了我的错误)。
        • 就个人而言,我可能更愿意尝试使用 APP-V 的虚拟包,而不是尝试使用无注册 COM(请参阅下一个要点)。
        • 应该重申,与其“屏蔽”您自己的应用程序 - 正确的供应商修复是停止部署在系统范围内错误注册的共享 COM 文件的私有副本,并开始使用适当的合并模块按预期安装它们以进行部署。
      • 5.5虚拟化(APP-V、虚拟机等)。

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

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

        • 如果您愿意,我将包含此“选项”以确保完整性和“历史目的”。这从来都不是一个好的选择,现在在较新版本的 Windows 上非常不安全。
        • MsiZap.exe 是 Microsoft SDK 工具,旨在作为开发人员清理失败的 MSI 安装或卸载的最后手段,它从未打算广泛使用。它允许对任何 MSI 软件包进行完全的“脏注销”。 MsiZap.exe 现在已弃用不支持不安全可供使用。仅用于一次性虚拟设备(如果有的话)。
        • 过去,一个常见的“系统管理员技巧”是使用 MsiZap.exe 来“zap”一个整体来自系统的 Windows 安装程序包。除了让您的系统变得无法治愈之外,它还消除了该应用程序的所有自我修复问题。
        • The junk that is left behind after running MsiZap.exe 基本上包括所有内容(实际的 MSI 数据库注册除外)。所有文件,所有注册表项(包括 COM),SharedDll 引用计数器(在重新安装时确实搞砸了),服务,任何东西。您将永远无法正确卸载。在大多数情况下,您将无法安装同一应用程序的升级版本而不会产生副作用。许多人在尝试安装在脏状态之上时实际上会看到更多的自我修复问题。
        • Rob Mensching,WiX、Orca 和 Windows Installer 拥有的所有东西的创建者 a blog post on the perils of MsiZap。 MSDN 描述了另一个不好的副作用:All program update information is removed when you use the Msizap.exe tool to uninstall a program from a Windows-based computer

    6。 总结和结论

    • 第 4 步 - 联系供应商进行修复 - 在我看来,这是唯一的“真正的修复”。
      • 所有其他提案都试图解决供应商错误导致的问题,而不是提供持久的解决方案。
      • 现实世界的问题是,许多供应商倾向于互相指责,因此您可能不走运。一些做得对的供应商确实会遭受其他人的设计错误。
    • 5.15.25.3 建议不复杂解决方法 ”。
      • 应该对所有人都安全。
      • 建议 5.25.3 应该可以尝试,即使 没有管理员权限
    • 提案 5.4 - 无注册 COM - 是一个相当复杂的潜在“修复”。
      • 可能需要开发人员参与才能找到要“隔离”的所有相关文件。
      • 根据我的经验,这种项目最终需要数天才能尝试(即使在专家帮助下) - 并不能真正保证它最终会奏效。
      • 我从专家那里听到相互矛盾的事情,有些人成功了,有些人说它失败了。有权访问解决方案源的人似乎成功了。
      • 我个人不喜欢它,因为它会带来潜在的安全漏洞,而且要部署的任何新文件版本都可能意味着新一轮的清单重新创作(我相信)。
      • 但是,现在有问题的 COM 文件太旧了,他们不太可能看到对它们进行的任何安全更新。我想这些 COM 对象现在主要用于 .NET 互操作。
    • 建议 5.5 - 虚拟化 - 是现在的常见选项,如果在环境中可用,可能应该在 5.4 之前尝试。俗话说“virtualize, seriously”。
      • 老实说,我不知道(缺乏经验)虚拟化是否适用于(办公室)插件。如果可以确认,请更新。
      • 可执行文件绝对可以虚拟化。
    • 提案 5.6 - “缓存的 MSI 调整” - 是一个“hack”,如果由 部署专家。
      • 存在一些“副作用”,尤其是对于卸载 - 以及“弹性”,但如果操作正确,这些应该是可控的。
      • 这是“真实世界”——没有什么是“干净的”。
    • 提案 5.7 - “zapping MSI” - 是不安全的、已弃用的“遗留黑客”。
      • 由于系统的“脏状态”,有几个副作用
      • 在运行 MsiZap.exe 后报告 MSI 数据库完全损坏。

    【讨论】:

      【解决方案2】:

      你的包裹里面一定有问题。 发现问题。

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

      2. 使用 AdminRigths 以用户身份运行您的应用程序

      3. 应用程序应该在自我修复后运行。可以运行两次,如果没有出现自修复,第二次运行后,说明想在MachinePart中创建条目的组件有问题,如HKLM或Programfiles或Windows文件夹。

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

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

      如果您可以在此处向我们展示该警告的日志,我们可以告诉您有关您的问题的更多信息,但一般来说,eventviewer 内的消息很清楚,并说明缺少什么资源。

      【讨论】:

        【解决方案3】:

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

        一般来说,维修是一件好事,因为它们允许用户在安装的产品损坏时对其进行维修。如果按照设计,存在已安装但不需要修复的资源,则在 WiX 中将 Component Id 设置为 null,因为这是防止修复某些文件的记录方法,请参阅此处的 ComponentId 备注:

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

        【讨论】:

        • 嗨菲尔。我实际上写了一个问答式的答案。它旨在作为一个通用检查表,用于解决重复的自我修复问题。老实说,它变得有点疯狂——当我第一次写它的时候它很短:-)。
        • 很抱歉浪费您的时间,我已经更新了这个问题,以便更清楚地表明已经提供了答案 - 如果您可以将此类杂乱无章称为答案:-)。也许不是与 stackoverflow 最相关的主题——但部署绝对是开发人员关心的问题——他们只是并不总是知道它是。随着 WiX 的出现,似乎有越来越多的开发人员参与到部署中——这总体上是好的。
        猜你喜欢
        • 2011-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        • 2014-08-22
        • 1970-01-01
        相关资源
        最近更新 更多