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

时间:2012-12-13 18:15:06

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

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

  

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

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

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

14 个答案:

答案 0 :(得分:23)

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

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

  

问题原因:

     

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

     

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

     
      
  1. 分阶段程序包阻止您在开发模式下安装该特定程序包

  2.   
  3. 分阶段的软件包占用了一些磁盘空间,但由于硬链接,其效果得到了缓解。如果文件在多个文件之间相同   一个软件包的版本,appx部署硬链接文件而不是   保留同一文件的两个单独副本。

  4.         

    如何找到“已暂存”的套餐?

         
        
    1. 在管理员PowerShell提示符下,输入命令:

           

      get-appxpackage -all

    2.         

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

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

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

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

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

      4.         

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

答案 1 :(得分: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. 尝试启动您的应用。它应该有效。

  7. 运行应用程序之后,您应该能够再次以用户模式运行VS.

答案 2 :(得分:18)

解决方法

如果其他任何内容都不适合您(对我而言也没有),您只需更改应用清单中的包名称(只需将最后几个字符替换为其他字符)即可。 执行此操作时,您将不再有冲突的包。

更改软件包名称可能不适合某些情况,但是当您在有问题的设备上完成调试后,您可以随时备份并更改它。

答案 3 :(得分:15)

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

因此,要为所有用户卸载应用,请使用以下命令:

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

[PackageFamilyName]通常是软件包的GUID。

注意事项/警告:该命令似乎使以后的重新安装(使用DISM重新提供程序包)非常困难,因为这似乎就像每个用户都单独卸载了该应用程序一样。无法进入这里...

答案 4 :(得分:12)

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

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

它帮助了我。因此Get-AppxPackage没有-all

答案 5 :(得分:8)

在Windows 10上:

首先,您需要一个SQL数据库编辑器,如SqliteBrowser3

  1. 以系统用户身份进行操作(使用psexec或其他方式)
  2. 制作C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd
  3. 的副本
  4. 使用SqliteBrowser3打开该副本
  5. 您需要编辑" package"," packageuser"和"用户"表。为此,您需要记下来自" user"的幽灵用户ID。表然后删除它们。然后,从" packageuser"删除user列中具有ghost用户ID的条目。表
  6. kill tasklist /svc /fi "services eq StateRepository"
  7. 备份后替换原始StateRepository-Machine.srd
  8. 重新启动,然后您可以正常删除您的包
  9. 注意:您需要将自己的用户条目分配给包

答案 6 :(得分:5)

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

Get-AppxPackage -AllUsers

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

答案 7 :(得分:4)

我必须执行以下操作:

[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
[[20:39:12.519]] [LOG]   server live
[[20:39:12.626]] [LOG]   Connected to DB :  SUCCESS
[[20:39:12.642]] [LOG]   index created   email_1 <<<<<<<< buyers  collection
[[20:39:12.647]] [LOG]   index created   email_1 <<<<<<<< dealers  collection
[[20:39:12.795]] [LOG]   index created   company_name_1 <<<<<<<< companies  collection
[[20:39:42.081]] [LOG]   start saving cars
[[20:39:42.084]] [LOG]   [ { id: '2',
    vin: '5GAKRBKD9EJ323900',
    make: 'Buick',
    model: 'ENCLAVE',
    year: '2014',
    priceInr: '2537993',
    trim: 'Leather FWD',
    engine: 'SPORT UTILITY 4-DR',
    body: '3.6L V6 DOHC 24V',
    color: 'Silver',
    transmission: 'Manual',
    DealerID: '103' },
  { id: '4',
    vin: '2GKALSEKXD6184074',
    make: 'GMC',
    model: 'TERRAIN',
    year: '2013',
    priceInr: '3851710',
    trim: 'SLE2 FWD',
    engine: 'SPORT UTILITY 4-DR',
    body: '2.4L L4 DOHC 16V FFV',
    color: 'Yellow',
    transmission: 'Manual',
    DealerID: '103' },
  { id: '6',
    vin: '1GC1KXE86EF127166',
    make: 'Chevrolet',
    model: 'SILVERADO 2500HD',
    year: '2014',
    priceInr: '840547',
    trim: 'LT Crew Cab 4WD',
    engine: 'CREW CAB PICKUP 4-DR',
    body: '6.6L V8 OHV 32V TURBO DIESEL',
    color: 'Grey',
    transmission: 'Automatic',
    DealerID: '103' },
  { id: '8',
    vin: '1GKKRTED1CJ211299',
    make: 'GMC',
    model: 'Acadia',
    year: '2012',
    priceInr: '3805008',
    trim: 'Denali FWD',
    engine: 'SPORT UTILITY 4-DR',
    body: '3.6L V6 DOHC 24V',
    color: 'Metallic White',
    transmission: 'Automatic',
    DealerID: '103' },
  { id: '10',
    vin: '1GKKVTKD9EJ282303',
    make: 'GMC',
    model: 'ACADIA',
    year: '2014',
    priceInr: '1730235',
    trim: 'Denali AWD',
    engine: 'SPORT UTILITY 4-DR',
    body: '3.6L V6 DOHC 24V',
    color: 'Black',
    transmission: 'Manual',
    DealerID: '103' },
  { id: '12',
    vin: '1GKS1AKC0FR200193',
    make: 'GMC',
    model: 'YUKON',
    year: '2015',
    priceInr: '3129397',
    trim: 'SLE 2WD',
    engine: 'SPORT UTILITY 4-DR',
    body: '5.3L V8 OHV 16V',
    color: 'Silver',
    transmission: 'Manual',
    DealerID: '103' } ]
[[20:39:42.089]] [LOG]   0 '<<<<<<<<      INDEX--OUTER   ' 6
[[20:39:42.089]] [LOG]   1 '<<<<<<<<      INDEX--OUTER   ' 6
[[20:39:42.090]] [LOG]   2 '<<<<<<<<      INDEX--OUTER   ' 6
[[20:39:42.090]] [LOG]   3 '<<<<<<<<      INDEX--OUTER   ' 6
[[20:39:42.090]] [LOG]   4 '<<<<<<<<      INDEX--OUTER   ' 6
[[20:39:42.090]] [LOG]   5 '<<<<<<<<      INDEX--OUTER   ' 6
[[20:39:42.120]] [LOG]   gmc []
[[20:39:42.120]] [LOG]   No such Company car exists in the garrage --> creating one
[[20:39:42.134]] [LOG]   buick []
[[20:39:42.134]] [LOG]   No such Company car exists in the garrage --> creating one
[[20:39:42.138]] [LOG]   gmc []
[[20:39:42.138]] [LOG]   No such Company car exists in the garrage --> creating one
[[20:39:42.143]] [LOG]   chevrolet []
[[20:39:42.143]] [LOG]   No such Company car exists in the garrage --> creating one
[[20:39:42.146]] [LOG]   gmc []
[[20:39:42.146]] [LOG]   No such Company car exists in the garrage --> creating one
[[20:39:42.150]] [LOG]   1 '<<<<<<<<      INDEX  ' 6
[[20:39:42.150]] [LOG]   gmc []
[[20:39:42.151]] [LOG]   No such Company car exists in the garrage --> creating one
[[20:39:42.153]] [LOG]   0 '<<<<<<<<      INDEX  ' 6
[[20:39:42.154]] [LOG]   Error : while adding company
events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: MongoError: E11000 duplicate key error collection: myKaarma.companies index: company_name_1 dup key: { : "gmc" }
    at company.save (/Users/prashant/Desktop/appathon/route/api.js:179:55)
    at /Users/prashant/Desktop/appathon/node_modules/mongoose/lib/model.js:4437:16
    at $__save.error (/Users/prashant/Desktop/appathon/node_modules/mongoose/lib/model.js:397:16)
    at /Users/prashant/Desktop/appathon/node_modules/kareem/index.js:246:48
    at next (/Users/prashant/Desktop/appathon/node_modules/kareem/index.js:167:27)
    at next (/Users/prashant/Desktop/appathon/node_modules/kareem/index.js:169:9)
    at Kareem.execPost (/Users/prashant/Desktop/appathon/node_modules/kareem/index.js:217:3)
    at _handleWrapError (/Users/prashant/Desktop/appathon/node_modules/kareem/index.js:245:21)
    at _cb (/Users/prashant/Desktop/appathon/node_modules/kareem/index.js:304:16)
    at /Users/prashant/Desktop/appathon/node_modules/mongoose/lib/model.js:258:9
    at /Users/prashant/Desktop/appathon/node_modules/kareem/index.js:135:16
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

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

答案 8 :(得分:3)

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

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

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

然后选择正确的套餐和确定,希望它会删除。

答案 9 :(得分:2)

什么对我有用

 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

答案 10 :(得分:2)

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

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

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

答案 11 :(得分:0)

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

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

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

务必检查用户表并查看您的案例中的值是什么!

答案 12 :(得分:0)

在尝试了许多其他变体之后,我刚刚在Win 10 v1903上使用了get-appxpackage -all | where name -eq "PackageName" | remove-appxpackage -AllUsers,并且可以正常工作。之后,我测试了包装是否存在。

答案 13 :(得分:0)

就我而言,我需要使用: file.choose() NLStart("C:\\Program Files\\NetLogo 6.2.0\\app", gui = TRUE, nl.jarname = "netlogo-6.2.0.jar") 而不是 Get-AppxProvisionedPackage -online 然后相应地使用 Get-AppxPackage