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

Fil*_*kun 58 powershell windows-8 windows-runtime windows-store windows-store-apps

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

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

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

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

Aur*_*deh 24

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

根据微软的说法,"其他修复" - 我仍然认为这个问题是一个错误 - 是:

问题原因:

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}}
Run Code Online (Sandbox Code Playgroud)

如何摆脱"分阶段"套餐?

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

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

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

  • 遗憾的是,这似乎不适用于Windows 8.1.从管理员命令提示符运行时,我收到此错误:Windows无法删除8eeaff03-92dd-46c9-84fc-7b252f93800b_1.0.0.0_neutral__9pm8dksvrxpey,因为当前用户没有安装该软件包.使用Get-AppxPackage查看已安装的软件包列表. (6认同)
  • 在8.1,重新启动并没有解决我的问题.这个答案不应再被标记为正确,因为遗憾的是,它不再适用于大多数情况. (3认同)
  • 要删除导致问题的一个包,请使用我使用以下行:psexec -s powershell -c"Get-AppxPackage -all | where name -eq`"APP.NAME`"| Remove-AppxPackage" (2认同)

Aur*_*deh 21

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


hen*_*rix 19

解决方法:

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

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

  • @MartinSuchan是的,这显然只是一种解决方法.解决方案是每个用户的卸载应用程序 - 在您的特定情况下可能会或可能不会,那就是当变通办法发挥作用时...... (4认同)
  • 对我来说,这是一个救生员.一天晚上我在这个工作了几个小时,最后放弃了.我刚刚重新讨论这个问题,为了我的直接测试目的,这是完美的!谢谢你,亨德里克斯! (3认同)

zax*_*zax 16

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

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

Get-AppxPackage -AllUsers [PackageFamilyName] | Remove-AppxPackage -AllUsers
Run Code Online (Sandbox Code Playgroud)

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

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


Pav*_*rov 12

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

Get-AppxPackage | where name -eq "APP.NAME" | Remove-AppxPackage
Run Code Online (Sandbox Code Playgroud)

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


int*_*ika 8

在Windows 10上:

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

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

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


Dam*_*Arh 5

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

Get-AppxPackage -AllUsers
Run Code Online (Sandbox Code Playgroud)

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

  • 我可以确认,即使在Windows 8.1上,我也没有办法从已删除的帐户中卸载该应用程序.还在调查. (2认同)

Fra*_*eau 5

我必须执行以下操作:

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

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