代码之家  ›  专栏  ›  技术社区  ›  bltxd

为什么MSI需要原始的.msi文件才能继续卸载?

  •  12
  • bltxd  · 技术社区  · 17 年前

    正如你们大多数人可能注意到的,当卸载一个MSI包时,Windows会要求原始的 .msi 文件。为什么会这样?

    我只能看到它的缺点:

    • 无法适应网络变化。
    • 无法恢复本地磁盘更改。
    • 用户无法预料。
    • 通常需要用户离开他们的办公桌,开始一个十字军东征,以获得正确的CD。
    • 证明装置不是独立的。
    • 促进不安全工具的使用,如msizap。
    • 这反过来促进了“下次我只使用压缩文件”的心态。

    有人能解释一下吗?

    2 回复  |  直到 7 年前
        1
  •  28
  •   Stein Åsmul    7 年前

    更新 :

    This new support tool (此工具现在也已弃用)可以在最新的Windows版本上尝试,如果 需要卸载的失效MSI包 (而不是过时的、不推荐的、不支持的 MXZAP.EXE )

    一些人建议使用saschabuamont链接到这里的工具: Uninstall without an MSI file . 如果你试过了,它能用,请务必告诉我们。该答案中的反馈表明它可以工作(到目前为止,我没有任何要测试的固定设置)。


    为什么需要原始安装介质? :

    • 卸载时不需要原始的msi,除非msi本身的设计不正确-或者缓存的msi丢失。 (详见下文)。
    • 所有已安装的msi文件都缓存在 %systemroot%\installer\.*安装程序 使用A 随机十六进制名称 .
    • 缓存的msi文件用于 维修 , 修理 卸载 操作——在大多数情况下,它足以卸载。
    • 在某些情况下 此缓存文件可能丢失 ,然后在某些情况下根本无法卸载 ( some theories as to why this can happen - MSI design errors , anti-virus quarantining , system restore , tinkering , developer system in erroneous state from development work , etc... )请参阅下面的详细信息和强制卸载或注销产品的链接。
    • 原始来源 仅当需要将文件复制到磁盘(用于维护安装)或MSI执行 显式请求 通过标准操作解析原始源 解决问题 或者通过自定义操作 不应该在编写正确的包中完成 -我认为MS Office软件包中包含了这个resolvesource错误,导致每个人都去寻找他们的安装CD/DVD)。
    • 在以前的Windows版本中,这个缓存的MSI被剥离了所有的cab,因此只包含安装程序结构,没有文件。
    • 从Windows 7开始( MSI版本5 ) MSI文件现在已缓存为完全大小 为了避免在启动安装程序时破坏影响UAC提示的文件签名(一个已知的Vista问题)。这可能会导致磁盘空间消耗的巨大增加(对于某些系统,为数千兆字节)。 Check this article and especially the discussion at the bottom for more intel .
    • 为了防止缓存一个巨大的msi文件,可以运行 管理安装 在安装之前。这就是一个在管理网络中进行适当部署的公司将如何做的事情,它将去掉cab文件,并使用一个小的msi文件和文件来创建一个网络安装点。 注意,这可能会导致 UAC提示 在某些情况下,因为提取的MSI文件不再签名-这必须用SOE/桌面配置进行测试 .
    • 有关管理安装的完整描述,请阅读此线程中的答案: What is the purpose of administrative installation initiated using msiexec /a? 或者类似但可能更容易理解的答案: admin install and its uses
    • 在一些罕见的情况下,缓存的MSI(随机名称)可能会错误地丢失,然后卸载将请求原始的MSI以完成卸载。 这种情况并不经常发生。过去人们可以用 MXZAP.EXE 清除这样的安装,但是这个工具 过时的 , 贬低 不支持的 . 不要使用它-与较新的Windows版本存在太多的不兼容性,并且会造成新的问题。也许试试 this support tool 相反(也已弃用)。我现在唯一能建议的选择是 this answer from saschabeaumont . 如果你试用这个工具,请告诉我们它是否适合你。 u.如果要找出导致缓存的MSI丢失的原因,请尝试阅读以下第12节: Uninstalling an MSI file from the command line without using msiexec (简而言之,可能的原因包括干扰系统还原、防病毒和清理脚本、错误的手动调整、磁盘空间不足、电源中断、开发人员盒调试错误、具有重复包代码的设计不当的MSI文件、失败的补丁等。)许多理论,我担心的是几乎没有确定性)。
    • 作为一个 最后的胜地 你可以试试 system restore (除非它完全或部分被禁用)返回到以前的安装状态,看看这是否解决了您的卸载问题(您可以在YouTube或类似网站上找到这方面的视频演示)。
    • 请注意,系统还原可能会影响必须重新应用的Windows更新以及许多其他系统设置。我已经看到了新的、无法解决的安装问题,这些问题是由系统恢复引起的,但通常它工作正常。显然,不要为了好玩而使用这个功能, 这是最后的办法 最好用于 回滚新驱动程序 或刚刚安装并发现会导致立即出现问题的设置。您返回的时间越长,您将为自己创建的返工就越多。很多不言而喻的东西,但我想应该提到。
    • 既然我提到了系统还原,我想我应该提到 the Last Known Good Configuration feature . 此功能与卸载或系统还原无关,但它是最后一个启动配置,该配置工作或导致系统运行。它可以用来让你的系统再次运行,如果它蓝屏或暂停在启动。这通常发生在驱动程序安装之后。但这对修复失败的卸载没有任何作用(或者 非常 惊讶)

    相关答案:


    除了这个答案之外,本文中关于卸载MSI软件包的各种方法可能也很感兴趣。这是一个 相当流行的文章 用一个 视图数量多 :

        2
  •  1
  •   Joel Coehoorn    17 年前

    保留原始MSI有几个原因:

    • 卸载程序使用它来了解安装了哪些文件和注册表项,并确保它们都已清理干净。
    • MSI可能包含需要执行的特殊卸载操作的代码。
    • 它允许您从“添加/删除程序”菜单执行“修复”操作,无论您是否自己保存了安装文件。

    通常情况下,Windows会为您缓存文件,因此您不必考虑它。查看您的%windir%\installer\folder。它要求您提供原始MSI的唯一原因是保存的文件是否有问题。这解决了您的大部分问题,尽管它确实增加了一个新的问题(磁盘空间)。