Windows 8アプリをデバッグしようとして、別のユーザーアカウントに既にコピーがインストールされていると、この問題が発生し続けます。
DEP0700:アプリの登録に失敗しました。別のユーザーが既にこのアプリのパッケージバージョンをインストールしています。パッケージ化されていないバージョンでこれを置き換えることはできません。競合するパッケージは{{{PackageName}}}であり、CN = {{{Certificate Stuff}}}によって公開されました。 (0x80073cf9)
時々、単にログインするか、他の人にマシンにログインしてアプリをアンインストールするように依頼することができます。あるいは、アプリケーションの名前/ IDを変更することもできますが、1つが常に可能であるとは限らず、もう1つは危険です(変更されたアプリケーションIDをソース管理にチェックインしたくない)。
アンインストールする方法が必要です。たぶんPowerShellスクリプト?
上記の私のプロセスはまだ機能しますが、Windows Update(はい、奇妙なことに)が「ステージングされたパッケージ」を一掃することを担当する競合状態の問題を単に回避します。
Microsoftによると 、「その他の修正」-と私はまだこの問題をバグと考えています-は:
問題の原因:
Windows Update(WU)は、お持ちのパッケージの新しいバージョンをダウンロードし、ローカルシステムとして「ステージング」します。これにより、ストアにアクセスしてアプリを更新する際に、更新プロセスが可能な限り迅速になります。 WUは、インストールされなかったステージングされたパッケージを最終的にクリーンアップします。
「Staged」パッケージを使用すると、どのような影響がありますか?
段階的なパッケージにより、その特定のパッケージを開発モードでインストールできません
ステージングされたパッケージはディスク領域を使い果たしますが、ハードリンクにより、この影響は軽減されます。パッケージの複数のバージョン間でファイルが同一である場合、appx展開は同じファイルの2つの別個のコピーを維持する代わりに、ファイルをハードリンクします。
「Staged」パッケージを見つけるにはどうすればよいですか?
管理者のPowerShellプロンプトで、次のコマンドを実行します。
get-appxpackage -all
マシン上のすべてのパッケージが表示されます。ステージングされたパッケージの場合、PackageUserInformationには{S-1-5-18 [Unknown user]:Staged}が表示されます。
get-appxpackage -all |% {if ($_.packageuserinformation.installstate -eq "Staged"){$_.packagefullname}}
「Staged」パッケージを削除するにはどうすればよいですか?
Mark Russinovichが作成したsysinternalsツールから
psexec
をダウンロードしますそれらをすべて取り除くには、通常のadmin/elevatedコマンドプロンプト(powershellではない)で実行します:
psexec -s powershell -c "get-appxpackage | remove-appxpackage"
それでもうまくいかない場合は、次の方法も試してみてください。これは通常のユーザーのマシンではなく、私の開発マシン用であるため、非開発者にどのように影響するかはわかりません:-P
C:\ Program Files\WindowsAppsおよびC:\ ProgramData\Microsoft\Windows\AppRepositoryフォルダーの所有権を取得し、管理者にフルアクセスを許可します。 TrustedInstallerにも変更権限があることを確認してください。また、所有権を取得しています。知らない場合、これはそのフォルダのプロパティを介して行われます。
[サービス]に移動し、Windows Installerサービスを停止します。
C:\ ProgramData\Microsoft\Windows\AppRepository \を開き、PackageRepository.edbファイルを削除します。
Windows Installerサービスを再度開始します。
管理者としてVisual Studioを起動します。
アプリを起動してみてください。動作するはずです。
アプリを一度実行すると、VSをユーザーモードで再度実行できるようになります。
回避策:
他に何も機能しない場合(私にとっても機能しませんでした)、アプリマニフェストでパッケージ名を変更するだけです(最後の数文字を別の文字に置き換えるだけです)。 これを行うと、競合するパッケージはなくなります。
一部のシナリオではパッケージ名を変更するのが適切ではない場合がありますが、問題のあるデバイスでのデバッグが終了したらいつでもバックアップして変更することができます。
Windows 10 1709では、remove-appxpackageコマンドレットが改善され、オプションとして-allusersが追加されました。
したがって、すべてのユーザーのアプリをアンインストールするには、次のコマンドが機能します。
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データベースエディターが必要です。
C:\ProgramData\Microsoft\Windows\AppRepository\StateRepository-Machine.srd
のコピーを作成しますuser
列のゴーストユーザーIDを持つエントリを削除します。tasklist /svc /fi "services eq StateRepository"
StateRepository-Machine.srd
を置き換えます。注:パッケージに割り当てられた独自のユーザーエントリを残す必要があります
Windowsストアアプリを管理するためのPowerShellコマンドレットのセットがあります。管理者として次のコマンドを実行すると、すべてのユーザーのマシンにインストールされているアプリを一覧表示できます。
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
次に、[〜#〜] select [〜#〜]正しいパッケージと[〜#〜] ok [〜#〜]を削除します。
私のために働いたもの
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
他のすべてが失敗し、あなたが必死であれば、私の場合のように(ユーザーが削除されたため)これは少し危険ですが、私にとってはうまくいきました。
DO AT YOUR OWN RISK!私のユーザーがマシンで作成された最後のユーザーであることは知っていました。
この回答は、TAKEOWNに関する上記のAuri Rahimzadehの回答と、 'SQL Browser For SQLite'を使用してStateRepository-Machine.srdを変更するintikaの回答の組み合わせです(ここからダウンロード: DBite for SQLite )、唯一の違いは、1つのことだけを編集したことです:PackageUser値を変更しましたUser3(以前に削除されたユーザーのID)から4(これは私、最後に作成されたユーザー)
Userテーブルを確認して、あなたのケースで値が機能することを確認してください!