【问题标题】:How to uninstall an app that another user installed?如何卸载其他用户安装的应用程序?
【发布时间】:2012-12-01 16:50:51
【问题描述】:

当我尝试调试我的 Windows 8 应用程序并且已经在另一个用户帐户上安装了一个副本时,我一直遇到这个问题:

DEP0700:应用注册失败。另一个用户已经安装了这个应用程序的打包版本。未打包的版本无法替代它。冲突的包是 {{{PackageName}}},它是由 CN={{{Certificate Stuff}}} 发布的。 (0x80073cf9)

有时我可以只登录或要求其他人登录机器并卸载应用程序。或者,我可以更改应用程序名称/ID,但其中一个并不总是可行,另一个是有风险的(我不想将更改后的应用程序 ID 签入源代码控制)。

一定有办法卸载它。也许是 PowerShell 脚本?

【问题讨论】:

标签: powershell windows-8 windows-runtime windows-store-apps windows-store


【解决方案1】:

有一组用于管理 Windows 应用商店应用的 PowerShell cmdlet。如果您以管理员身份运行以下命令,则可以列出计算机上所有用户已安装的应用程序:

Get-AppxPackage -AllUsers

不过,我还没有找到为其他用户卸载应用程序的方法。 Remove-AppxPackage 仅适用于当前用户。如果您删除安装了应用程序的用户,这会使一切变得更加有趣。至少在 Windows 8 的预发布版本中,这使得删除他安装的应用程序是不可能的。自最终发布以来,我设法成功避免了这种情况,因此我无法确认问题仍然存在,即删除用户帐户时未卸载应用程序。

【讨论】:

  • 好吧,我听说删除用户帐户会阻止为该用户安装的所有应用程序从列表中删除时存在问题。我不确定我是否这样做了,但我现在有一个应用程序无法安装在我工作的 3 台平板电脑中的 2 台上,因为即使没有用户安装该应用程序 - 它仍然声称它在那里并获取-AppxPackage -AllUsers 在列表中显示它。我可以从商店很好地安装它,但不能从 Visual Studio 安装。我认为其他应用程序安装得很好,所以问题不在于开发许可证。下次再看时,我会再次检查。
  • 我可以确认,即使在 Windows 8.1 上,我也无法从已删除的帐户中卸载应用程序。仍在调查中。
【解决方案2】:

如果这不起作用,您还可以尝试以下对我有用的方法。请注意,这是针对我的开发机器,而不是普通用户的机器,所以我不知道它会如何影响非开发人员:-P

  1. 获取文件夹 c:\Program Files\WindowsApps 和 C:\ProgramData\Microsoft\Windows\AppRepository 的所有权 - 授予管理员完全访问权限。确保 TrustedInstaller 也具有修改权限。你也取得了所有权。如果您不知道,这是通过该文件夹上的属性完成的。

  2. 转到服务并停止 Windows Installer 服务。

  3. 打开 C:\ProgramData\Microsoft\Windows\AppRepository\ 并删除 PackageRepository.edb 文件。

  4. 再次启动 Windows Installer 服务。

  5. 以管理员身份启动 Visual Studio。

  6. 尝试启动您的应用程序。它应该可以工作。

在你运行应用程序一次之后,你应该能够再次在用户模式下运行 VS。

【讨论】:

  • 帮我解决了这个奇怪的问题。在 PC 上没有其他用户
  • 我在这方面与 Microsoft 有一个未决案例。到目前为止,我们已经将其追溯到 Visual Studio 问题,因为运行 Powershell 脚本来安装应用程序工作正常。当我们有解决方案时,我会更新这个帖子。
  • 今天刚刚在另一个 Surface 设备上遇到了这个问题。多个用户,单个设备,每个用户使用相同的应用程序。阿斯潘。
  • 删除PackageRepository.edb 可以防止安装有依赖关系的东西。它似乎没有重建数据库。即使多次重启,Get-AppxPackage -all 也不会返回任何包。
  • 无法停止 AppXSVC 以删除 edb 文件。
【解决方案3】:

我上面的过程仍然有效,但它只是解决了竞争条件问题,即 Windows 更新(是的,很奇怪)负责清除“暂存包”。

According to Microsoft,“其他修复”——我仍然认为这个问题是一个错误——是:

问题原因:

Windows 更新 (WU) 会下载您拥有的更新版本的软件包,并且 将它们“分级”为本地系统,这样当你去商店时 更新应用程序,更新过程尽可能快。吴将 最终清理从未安装过的暂存包。

使用“分阶段”包会有什么后果?

  1. 暂存包会阻止您在开发模式下安装特定包

  2. 分阶段的包会占用一些磁盘空间,但由于硬链接,这种影响会有所缓解。如果一个文件在多个之间是相同的 包的版本,appx 部署硬链接文件而不是 维护同一文件的两个单独副本。

如何找到“暂存”包?

  1. 在管理员 powershell 提示符下,命令:

    get-appxpackage -all

将显示机器上的所有包。对于分阶段包, PackageUserInformation 将显示 {S-1-5-18 [Unknown user]: Staged} 2.使用powershell过滤,获取所有暂存的packagefullnames的列表,你可以这样做:

get-appxpackage -all |% {if ($_.packageuserinformation.installstate -eq "Staged"){$_.packagefullname}}

如何摆脱“分阶段”包?

  1. 从 Mark Russinovich 编写的 sysinternals 工具下载 psexec

  2. 要摆脱所有这些,请在常规管理员/提升命令提示符(不是 powershell)中运行:

psexec -s powershell -c "get-appxpackage | remove-appxpackage"

【讨论】:

  • 要删除导致问题的一个包,请使用我使用以下行: psexec -s powershell -c "Get-AppxPackage -all | where name -eq "APP.NAME" |删除-AppxPackage"
  • psexec 不适用于 WinRT >:(
  • 遗憾的是,这似乎不适用于 Windows 8.1。从管理员命令提示符运行时,我收到此错误:Windows 无法删除 8eeaff03-92dd-46c9-84fc-7b252f93800b_1.0.0.0_neutral__9pm8dksvrxpey 因为当前用户没有安装该软件包。使用 Get-AppxPackage 查看已安装的软件包列表。
  • 为了解决问题,我在执行完 PS 命令后不得不重新启动计算机。这是一台 W8.1 机器。
  • 在 8.1 上,重新启动并没有解决我的问题。这个答案不应再被标记为正确,因为不幸的是它不再适用于大多数情况。
【解决方案4】:

解决方法

如果没有其他方法适合您(对我来说也没有),您可以在应用清单中更改您的包名称(只需将最后几个字符替换为其他字符)。 执行此操作后,您将不再有冲突的包。

在某些情况下更改包名称可能不合适,但您可以随时备份它并在有问题的设备上完成调试后将其更改回来......

【讨论】:

  • 对我来说,这是一个救命稻草。我一晚上为此工作了几个小时,最后放弃了。我刚刚重新遇到了这个问题,为了我的直接测试目的,这是完美的!谢谢你,亨德里克斯!
【解决方案5】:

如果您想删除当前用户的应用,请尝试:

Get-AppxPackage | where name -eq "APP.NAME" | Remove-AppxPackage

它帮助了我。所以有Get-AppxPackage 没有-all

【讨论】:

  • 专业提示:使用-like 搜索并使用通配符查找名称:Get-AppxPackage -all | Where Name -like "*P.NA*" 但是非常做得好;谢谢。我遇到的唯一麻烦是用户仍然无法卸载侧载应用程序(尽管它显示为 Get-AppxPackage),我不得不通过 AppPackage 的 Add-AppDevPackage.ps1 脚​​本“重新安装”以使其最终正常运行。跨度>
  • 在完成Get-AppxPackage -AllUsers之后这对我有用
【解决方案6】:

什么对我有用

 1. Close VS
 2. Open Services
 3. Stop Appx Deployment Service
 4. Open C:\ProgramData\Microsoft\Windows\AppRepository\ and delete the PackageRepository.edb file.
 5. Start Appx Deployment Service
 6. Start VS & Debug - worked like charm

【讨论】:

    【解决方案7】:

    在 Windows 10 上:

    首先,你需要一个像 SqliteBrowser3 这样的 SQL 数据库编辑器

    1. 以系统用户身份执行该操作(使用 psexec 或其他)
    2. 复制C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd
    3. 使用 SqliteBrowser3 打开该副本
    4. 您需要编辑“package”、“packageuser”和“user”表。为此,您需要记下“用户”表中的幽灵用户 ID,然后将其删除。然后,从“packageuser”表中删除 user 列中具有 ghost 用户 ID 的条目。
    5. 杀死tasklist /svc /fi "services eq StateRepository"
    6. 备份后替换原来的StateRepository-Machine.srd
    7. 重启后就可以正常删除包了

    注意:您需要将自己的用户条目分配给包

    【讨论】:

    • SqlLite 浏览器无法打开 StateReposity-Machine.srd 的副本
    • 我想通了。
    • 我使用这个精彩的教程来执行该过程。现在让我们看看。
    • 更新表名分别为packagepackageuseruser
    【解决方案8】:

    这类似于其他一些答案,尤其是@Pavel Nazarov 的答案,但适用于不同的用户。而且它与公认的答案不同,因为您不需要安装任何程序。

    在管理员模式下的 Windows Powershell 中,运行:

    get-appxpackage -all | where name -eq "{{ App Name }}" | remove-appxpackage

    【讨论】:

    • 有趣的是你刚刚发布它,因为我正在寻找答案。 :) 不幸的是,至少在 TH2 上它不起作用。第一次运行它 - 它会为当前用户卸载它,但它仍然为另一个用户保留。然后当你重新运行 - 你得到: get-appxpackage -all |其中名称-eq“Microsoft.WindowsSoundRecorder”| Remove-AppxPackage Remove-AppxPackage:部署失败,HRESULT:0x80073CF1,找不到包。 Windows 无法删除 Microsoft.WindowsSoundRecorder_10.1611.3051.0_x64__8wekyb3d8bbwe,因为当前用户没有安装该软件包。 ...
    • @FilipSkakun 哎呀,你可能是对的 - 这可能是一个糟糕的答案。我以一个用户身份运行 powershell,但我用另一个用户的凭据给了它管理员权限。那个管理员用户就是我要从中删除应用程序的用户。所以这可能是我困惑的根源。
    【解决方案9】:

    虽然这对我不起作用,但它可能只适用于其他人......

    以管理员身份启动powershell并运行:

    Get-AppxPackage -all | Out-GridView -Passthru | Remove-AppXPackage
    

    然后SELECT正确的包和OK,希望它会删除。

    【讨论】:

      【解决方案10】:

      如果所有其他方法都失败并且您很绝望,就像我的情况一样(因为用户已被删除)这个有点危险,但它对我有用。

      风险自负! 我知道我的用户是机器上创建的最后一个用户。

      这个答案是 Auri Rahimzadeh 上面关于 TAKEOWN 的答案和 intika 的答案的组合,您使用“DB Browser For SQLite”修改 StateRepository-Machine.srd(在此处下载:DB Browser for SQLite 3),唯一的区别是我只编辑了一样东西: 在 PackageUser 中,我将值 User 3 (这是之前删除的用户的 ID)更改为 4 (是我,最后一个创建的用户)

      请务必检查 User 表,看看哪些值适用于您的情况!

      【讨论】:

        【解决方案11】:

        Windows 10 1709 中对 remove-appxpackage cmdlet 进行了改进,添加了 -allusers 作为选项。

        因此,要为所有用户卸载应用程序,此命令有效:

        Get-AppxPackage -AllUsers [PackageFamilyName] | Remove-AppxPackage -AllUsers
        

        其中 [PackageFamilyName] 通常是您的包的 GUID。

        警告/警告:该命令似乎使重新安装(使用 DISM 重新配置包)变得非常困难,因为它似乎将每个用户单独卸载了应用程序。这里太多了...

        【讨论】:

        • 仅供参考,出现此问题是因为 Windows 10 存在一个错误,即“重置”应用程序将其删除但无法正确删除。当我进入应用设置并点击重置时,我的应用崩溃了。
        • 终于!这不是一个过时的答案,实际上对我有用。仅供参考,我运行的是 Windows 10 1809。尝试了 Remove-AppxPackage 很多次,我把头发拉了出来。看到这个答案,然后添加了“-AllUsers”并繁荣,该应用程序终于被熏了。谢谢你,@zax!
        【解决方案12】:

        我必须做到以下几点:

         get-appxpackage -all > log.txt
         notepad log.txt (search for the offending PackageFullName)
         remove-appxpackage -allusers -package "PackageFullName"
        

        对我来说关键是添加 -allusers 标志,因为没有它我会收到 "...因为当前用户没有安装该软件包。使用 Get-AppxPackage查看已安装的软件包列表。”错误。

        【讨论】:

          【解决方案13】:

          在尝试了许多其他变体之后,我刚刚在 Win 10 v1903 上使用了get-appxpackage -all | where name -eq "PackageName" | remove-appxpackage -AllUsers,它确实有效。之后我测试了包裹的存在,但它消失了。

          【讨论】:

          • 您实际上可以执行类似Get-AppxPackage -a *ageNam* | Remove-AppxPackage -a 之类的操作来为所有用户删除基于名称子字符串的包,甚至不需要where 部分。如果您的应用因某种原因卡住并且只有系统帐户能够删除它,您可能仍需要 psexec 等来卸载/删除文件。
          【解决方案14】:

          就我而言,我需要使用: Get-AppxProvisionedPackage -online 而不是 Get-AppxPackage 然后对应使用Remove-AppxProvisionedPackage -PackageName YourPackageNameHere -Online -AllUsers

          【讨论】:

          • 我认为这是针对操作系统附带的预装应用程序,应该是Get-ProvisionedAppxPackage
          【解决方案15】:

          这对我有用。

          1. 以管理员身份打开 Powershell。
          2. 执行此命令(使用您的包名和安装它的用户)

          Get-AppxPackage -Name "MyPackageBlah" -User "blahdy"

          1. 从输出信息中的 PackageFullName 复制值。

          名称:MyPackageBlah
          发布者:CN=BLAH
          架构:X64
          资源编号:
          版本:1.0.34.0
          PackageFullName : MyPackageBlah_1.0.34.0_x64__ww4kfnnrsedz6
          IsFramework : 错误
          PackageFamilyName : MyPackageBlah_ww4kfnnrsedz6
          PublisherId : ww4kfnnrsedz6
          IsResourcePackage:错误
          IsBundle:错误
          IsDevelopmentMode : 假
          不可移动:错误
          依赖项: {Microsoft.UI.Xaml.2.6_2.62107.6002.0_x64__8wekyb3d8bbwe,
          Microsoft.NET.Native.Framework.2.2_2.2.29512.0_x64__8wekyb3d8bbwe,
          Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x64__8wekyb3d8bbwe,
          Microsoft.VCLibs.140.00_14.0.30035.0_x64__8wekyb3d8bbwe}
          IsPartiallyStaged : 错误
          SignatureKind : 开发者
          状态:好的

          1. 执行此命令

          删除-AppxPackage -Package “MyPackageBlah_1.0.34.0_x64__ww4kfnnrsedz6”-AllUsers

          您现在可以在 Visual Studio 中运行您的应用了。

          【讨论】:

          • 您也可以使用Get-AppxPackage -Name "MyPackageBlah" -A 来检查应用程序中的AllUsersGet-AppxPackage -Name "MyPackageBlah" -A | Remove-AppxPackage -A 以一次性将其删除。这和马克的回答基本一样。
          猜你喜欢
          • 2018-08-07
          • 2014-08-11
          • 2019-12-13
          • 1970-01-01
          • 2017-06-23
          • 1970-01-01
          • 1970-01-01
          • 2012-12-26
          • 1970-01-01
          相关资源
          最近更新 更多