如何卸载另一个用户安装的应用程序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何卸载另一个用户安装的应用程序?相关的知识,希望对你有一定的参考价值。

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

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

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

必须有一些方法来卸载它。也许是PowerShell脚本?

答案

我上面的过程仍然有效,但它只是解决了竞争条件问题,其中Windows Update(是的,奇怪的是)负责消除“分阶段包”。

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

问题原因:

Windows Update(WU)下载您拥有的更新版本的软件包并将其“分级”为本地系统,这样当您前往商店更新应用程序时,更新过程将尽快完成。 WU将最终清理从未安装过的分阶段包。

拥有“分阶段”套餐有什么后果?

  1. 分阶段程序包阻止您在开发模式下安装该特定程序包
  2. 分阶段的软件包占用了一些磁盘空间,但由于硬链接,其效果得到了缓解。如果某个包的多个版本之间的文件相同,则appx部署会对文件进行硬链接,而不是维护同一文件的两个单独副本。

我如何找到“分阶段”包?

  1. 在管理员PowerShell提示符下,命令: get-appxpackage -all

将显示机器上的所有包。对于分阶段包,PackageUserInformation将显示{S-1-5-18 [未知用户]:已暂存} 2.使用powershell过滤,获取所有已暂存的包完整列表的列表,您可以执行以下操作:

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

如何摆脱“分阶段”套餐?

  1. 从Mark Russinovich编写的sysinternals工具下载psexec
  2. 要摆脱所有这些,请在常规管理/提升命令提示符(而不是PowerShell)中运行:

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

另一答案

什么对我有用

 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
另一答案

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

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

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

另一答案

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

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

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

务必检查用户表并查看您的情况下的值!

另一答案

如果这不起作用,您也可以尝试以下,这对我有用。请注意,这是我的开发机器,而不是普通用户的机器,所以我不知道它会如何影响非开发者:-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.

另一答案

解决方法:

如果没有别的东西适合你(对我而言也没有),你可以在应用程序清单中更改你的包名称(只需用其他字符替换最后几个字符)。执行此操作时,您将不再有冲突的包。

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

另一答案

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

因此,要为所有用户卸载App,此命令有效:

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

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

警告/注意:该命令似乎在以后很难重新安装(使用DISM重新配置包),因为它似乎对待每个用户单独卸载应用程序。进入这里太多了......

另一答案

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

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

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

另一答案

在Windows 10上:

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

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

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

另一答案

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

Get-AppxPackage -AllUsers

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

另一答案

我必须做以下事情:

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

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

另一答案

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

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

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

然后选择正确的包并确定,希望它将删除。

以上是关于如何卸载另一个用户安装的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个片段访问片段对象

如何在kotlin中从一个片段转到另一个片段?

如何在另一个片段内膨胀另一个布局

Android:如何在选项卡内从一个片段导航到另一个片段? [关闭]

如何将数据从一个 Fragment 发送到另一个 Fragment?

Android - 如何将一个片段放在另一个片段上