【问题标题】:Windows msi: error 1316: the specified account already existsWindows msi:错误 1316:指定的帐户已存在
【发布时间】:2015-09-07 15:13:20
【问题描述】:

从包中执行 wix 包在升级过程中输出“错误 1316:指定的帐户已存在”。 Windows 安装程序如何输出此错误代码?恐怕没有太多关于它的文档。

我们之前发布了一个包含单个 msi 包的产品,现在我们正在准备升级,其中包含一个包含此 msi 包新版本的 wix 包。原始msi包和更新之间的产品代码和文件名没有改变。

编辑: msi 包目前不支持升级。当用户需要升级时(无论是大升级、小升级还是小升级),都必须先手动卸载之前的包...

编辑 2:我刚刚删除了对 util 扩展的引用以进行编译,安装程序似乎工作正常...不过我仍然需要对其进行全面测试。

【问题讨论】:

    标签: wix windows-installer bundle upgrade


    【解决方案1】:

    像 MrFusion 一样,我在卸载/安装另一个程序时遇到了这个问题。不幸的是,该答案中的链接不再有效,并重定向到列出许多简单修复解决方案的页面,但唯一有用的解决方案除外。那个,“程序安装和卸载”,目前在:https://support.microsoft.com/en-us/help/17588/fix-problems-that-block-programs-from-being-installed-or-removed

    它为我解决了问题。

    【讨论】:

    【解决方案2】:

    我遇到了他同样的问题,并且由于 win10 不允许您从网络上运行 fixit 工具,因此我执行了以下 hack 以在我的 Windows 10 笔记本电脑上卸载 Asus Smart Gesture。

    1. 您需要伪造 MS 网站,让其认为您的电脑不是 Win10。我安装了一个 Chrome 插件,允许我将 chrome 浏览器的用户代理更改为认为我是 IE9 和以前版本的 windows:Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;Trident/5.0)

    2. 这使您可以看到 fixit 按钮并下载该工具的便携版本(以防您需要在非联网客户端上使用它)

    3. 我下载并解压到我的下载库中名为 fixitp 的文件夹中。

    4. 如果我直接运行 exe,我会收到一些讨厌的脚本错误。我解决这个问题的方法是导航到 Resources 文件夹,然后导航到 Troubleshooters 文件夹。

    5. 我运行了 Program_Install_and_Uninstall.diagcab,它运行并允许我成功卸载 Asus SmartGesture 程序。

    6. 然后我从他们的网站安装了新版本的华硕智能手势。

    我怀疑任何无法卸载的已安装应用程序都可以通过相同的过程解决 - 只是没有遇到任何其他应用程序。

    祝你好运。

    【讨论】:

      【解决方案3】:

      升级 MSI 要求 MSI 具有新的 ProductCode、递增的 ProductVersion(在前 3 个字段中)和相同的 UpgradeCode。所以我不清楚你是否真的得到了升级,这取决于 Burn 部分认为你在做什么。它无法进行升级,因为您拥有相同的 ProductCode。 (您需要在 MSI 中添加 MajorUpgrade 元素才能进行正确升级)。因此,对于您是否获得真正的全面升级存在一些疑问。如果您打算用完整升级和更高版本的产品替换已安装的 MSI,请使用 MajorUpgrade。

      因此,Burn 可能已决定通过重新安装 MSI 文件来进行就地更新(这更像是一个补丁而不是更新),这是相关的,因为您没有说明您是否有任何自定义操作或 WiX 实用程序创建用户帐户的函数(它们仍然是自定义操作)。如果你这样做了,那么最可能的错误原因是 Burn 通过重新安装 MSI 文件重新安装了新的 MSI 作为更新,并且一些自定义操作只是再次运行,是的,该用户仍然存在,因为没有实际卸载会删除它。或者您的 MSI 的 ProductVersion 相同,并且您获得了维护模式修复,因此自定义操作将再次运行。

      我会得到一份详细的升级日志,以确切了解发生了什么。

      这里有很多猜测,因为您说您想要升级,但您的 MSI 并不是为实际升级而构建的,而且您没有说您是否有 WiX util User 来创建用户帐户。你也没有说你是否增加了新 MSI 的 ProductVersion,所以这再次导致对 Burn 可能做什么的更多猜测。详细日志将显示它是自定义操作问题还是其他问题,您正在执行哪种更新(如果有)。

      【讨论】:

      • 参考我的编辑。此外,wix 包中是否有内置功能可以首先卸载包?我们可以编辑 msi 包以支持升级,但这需要我们做很多工作......
      • 另外我还是不明白“error 1316: The specified account already exists”这个错误怎么会出现。如有任何解释,我将不胜感激
      • 据我所知,正如我所说,您实际上并没有安装程序升级,因为您需要用户卸载旧版本(为什么?)。据我所知,您有一个全新的安装,假设用户已经卸载了旧版本。如果您安装与已安装相同 ProductCode 的相同 MSI,那么您将获得维护模式,基本上是修复,并且基本上需要重新安装。因此自定义操作 util 再次运行,无法创建已存在的用户。再次,猜测没有关于代码/版本等的所有信息。
      【解决方案4】:

      我最近遇到了这个问题。 对我来说,通过保持安装程序的旧版本和新版本的名称相同,这对我有用。 不知道为什么会这样,但使用 msi 时的一些最佳做法是保持安装程序的名称相同。

      几个链接来支持这个案例——

      1. http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/KB2918614-td7596942.html

      2. https://community.flexerasoftware.com/showthread.php?189045-Upgrade-failed-with-Error-1316&highlight=error+1316+account+already+exists

      【讨论】:

        【解决方案5】:

        我在卸载另一个程序时遇到了同样的问题。这个 Fix-It 为我解决了这个问题:https://support.microsoft.com/en-us/mats/program_install_and_uninstall/en

        更新说明:不再需要在 Windows 10 上模拟较旧的用户代理来下载 fix-it 文件。

        更新 2: 作为 Chris Johnson mentioned,Microsoft 已停止使用 Easy Fix,因此上面的链接不再有效。

        【讨论】:

          【解决方案6】:

          您可能需要更改 MSI 的“packagecode”(注意:不是“ProductCode”)。您可以在摘要信息流中找到它。

          我自己在尝试创建升级 MSI 包时遇到了这个问题。使用 Orca 更改 'packagecode' 修复它。

          【讨论】:

            【解决方案7】:

            对我来说,当我尝试卸载 nodejs 时,就会发生这种情况。在我的情况下解决的问题是下载已安装的相同版本的 nodejs (8.11.1) 并从 msi 安装程序文件中卸载它。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-10-13
              • 1970-01-01
              • 2014-05-30
              • 2016-11-03
              • 2020-03-26
              相关资源
              最近更新 更多