在 Vista/Win 7 上卸载链式 msi 时出现错误 1730(需要管理员权限)

Posted

技术标签:

【中文标题】在 Vista/Win 7 上卸载链式 msi 时出现错误 1730(需要管理员权限)【英文标题】:Error 1730 (needs admin rights) when uninstalling chained msi on Vista/Win 7 【发布时间】:2012-02-04 03:28:58 【问题描述】:

我在 Installshield 2012 中使用基本 MSI 创建了安装。

我正在使用链式 MSI 技术(在 Windows 安装程序 4.5 及更高版本中受支持)。

我的安装结构包含一个 Main-MSI(在 Setup.exe 中)和几个较小的 MSI 包,它们链接到主 MSI。

在 XP 上,它就像一个魅力。我可以安装它就好了,当我想卸载它时,我只需选择卸载Main-MSI,它会自动删除所有链接的MSI。

但是,在 Vista 和 Windows 7 上,我在卸载时遇到了用户权限问题。

当我选择卸载主 MSI 时,它只是在没有进一步通知的情况下关闭。检查 MSI 日志文件,当它尝试卸载我的第一个链接的 MSI 时,我可以看到以下内容:

错误 1730。您必须是管理员才能删除此应用程序。要删除此应用程序,您可以以管理员身份登录,或联系您的技术支持小组寻求帮助。

我猜由于调用链接 MSI 上的卸载字符串的是 Main-MSI,因此提升权限不会发生这种情况(即使我已将 Setup.exe 设置为需要管理员权限 - 这也是要求)。

所以我现在的问题是 - 有什么办法可以解决这个问题 - InstallShield 的隐藏角落是否有一些标志需要设置才能使其正常工作?

现在的临时解决方法是手动卸载每个链接的 MSI 包,然后最后卸载主 MSI,但这不是一个可靠的解决方案。禁用 UAC 也不是一种选择。

我希望你能提供帮助,因为我完全迷失在这个问题上,而且我的谷歌搜索已经产生了任何有用的东西。

【问题讨论】:

您是否使用数字证书签署您的包裹?我不太记得这种行为是什么,但我知道它至少有助于在链接时消除对一些额外 UAC 提示的需要。 不,此时我没有签署我的包裹。我可以尝试一下,看看它是否能解决问题。感谢您的建议。 您是否设置了 MSIDEPLOYMENTCOMPLIANT 属性? 嗯,这看起来很有趣.. 我不知道那个属性。我会在这个星期一试一试。谢谢:) Christopher 的意思可能是,设置该属性可能导致不出现 UAC,因此可能是此处失败的原因。如果在摘要信息中设置 UAC 标志,则相同。这意味着此设置/标志通常与您作为新用户所理解或想要的相反。 【参考方案1】:

实际上,解决方案很简单,但不是非常面向用户。在安装和卸载过程中会出现新的 /qb 对话窗口。 对于链式 MSI,您必须将安装用户界面从 (/qn) 更改为 基本 (/qb),因为主 MSI 不会将管理员权限传递给拥有的链式 MSI ,并且在启用 UAC 的隐藏模式下会导致错误。 另外我可以推荐参考 White Papers for chained MSI here,它描述了很多细节。

【讨论】:

【参考方案2】:

我无法直接解决“卸载链接安装程序”问题,因为我自己不使用链接。我知道很多人对链式技术有问题,而且我知道没有任何人对此感到真正满意的例子。

所以对我来说,编写防弹设置并不是一项经过验证的技术。如果您使用引导程序或编写自己的 setup.exe,它会按顺序安装所有 msi 文件,您可以完全控制。根据您的完美要求,它可能会花费大量精力,但是“一堆”安装和卸载应该不是那么困难。 我没有使用 WiX 的“刻录”,但我知道它存在。也许其他人知道这里是否值得推荐。

至少尝试使用引导程序进行卸载。您现有的或新的:只是一个小的 .exe,您将其放在注册表中 ARP 下的“卸载”条目下。它只需连续调用所有 MSI 卸载。可以是五线。

没有链式那么漂亮,但已经为其他数千人工作了多年 :-) 好老的工作技术。

【讨论】:

以上是关于在 Vista/Win 7 上卸载链式 msi 时出现错误 1730(需要管理员权限)的主要内容,如果未能解决你的问题,请参考以下文章

使用可覆盖属性时如何按命令行卸载 MSI 包?

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

MSI 未卸载 .dll 文件

如何在 Windows 上静默卸载 Python 2.7?

卸载电子 msi 应用程序时如何删除它的 AppData?(使用 electron-builder)

MSI没有卸载.dll文件