
MSIXパッケージ化したWindowsのアプリをインストールしようとしたら、
アプリをインストールできませんでした。エラー メッセージ:現在のユーザーが、このアプリのパッケージ化されていないバージョンをすでにインストールしています。これをパッケージ化されたバージョンに置き換えることはできません。競合するパッケージはXXXXX、その発行元は CN=XXXX です。 (0x80073cfb)
公式サイトによると、この「0x80073cfb」エラーは、
提供されたパッケージはすでにインストールされており、パッケージの再インストールはブロックされています。
すでにインストールされているパッケージとビット単位で同一ではないパッケージをインストールすると、このエラーが発生することがあります。 デジタル署名もパッケージの一部であることに注意してください。 したがって、パッケージが再構築または再作成されると、以前にインストールされたパッケージとビット単位で同一ではなくなります。 このエラーを修正するには、次の 2 つのオプションが考えられます:
(1) アプリのバージョン番号を増やし、パッケージを再構築して再署名します。
(2) 新しいパッケージをインストールする前に、システム上のすべてのユーザーの古いパッケージを削除します。
原因と対策
原因 古いアプリをインストールしようとした
私の場合は、一度完成したMSIXパッケージ化したWindowsのアプリをWindowsにインストール。
が、その後、もっと改良・修正したくなって、Visual Studio修正。
きちんと動作するかデバッグ。
続いて、Visual Studioの「公開」のMSIXパッケージ化。
で、ちょこまかこのデバッグと公開を繰り返していたんですけれど、その後この修正は必要なかったな、と、古いパッケージ化したものを再インストールしようとしたんですね。
すると、このエラーが。
デバッグするとインストールされる
MSIXパッケージ化したWindowsアプリをVisual Studioからデバッグ実行すると、自動的にそのパッケージがローカルのWindowsにインストールされた状態で実行されます。
これは、MSIXパッケージ化したWindowsのアプリが「コンテナ」と呼ばれるサンドボックス(閉じ込められた専用の場所)で動作するようになっているからで、デバッグはこの環境できちんと動作するか確認します。
インストールされるか確認
実際にデバッグでインストールされるか確認してみました。
まずは、該当するアプリを「設定」からアンインストール。

Windowsの「設定」を開き、MSIXパッケージ化したWindowsのアプリをアンインストールします。
そして、デバッグ。

Visual Studioで、メニューの中にある「デバッグ」を開き、「▶デバッグの開始」を選択すると・・・
続いてWidowsの「設定」を開き、「アプリ」>「インストールされているアプリ」を開くと・・・

この通り、インストールされています。
また、デバッグを停止した場合もインストールされたままです。

デバッグ停止のボタンをクリックすると・・・

このようにインストールされたままです。
古いファイルから更新しようとした
で、デバッグと公開を繰り返したあとに、最終的な修正は必要なかったので、デバッグ前に「公開」で作成したパッケージを再インストールしようとして、先ほどのエラーが出てしまったと。
つまり、すでにデバッグで新しいバージョンがインストールされているのに、古い公開で作成したバージョンをインストールしようとすると、
アプリをインストールできませんでした。エラー メッセージ:現在のユーザーが、このアプリのパッケージ化されていないバージョンをすでにインストールしています。
というエラーが出てしまう、と。
対策
対策はいくつかあります。
アンインストールする
デバッグでインストールされたアプリ、もしくは古いバージョンのアプリを設定からアインインストールします。
これは普通のWindowsアプリのやり方と一緒です。

設定を開き①の…をクリック。
表示されたメニューの中から②の「アンインストール」を選択。
この状態で「公開」でパッケージ化したアプリをインストール(もしくは更新)します。
新しいバージョンを公開する
デバッグ後に、「公開」をクリックして新しいバージョンをパッケージ化して配布状態にしたファイルからインストールすると、最初のエラーは表示されないはずです。

MSIXプロジェクトを右クリックして出てきたメニューから「公開」を選択。
アプリ本体だけデバッグする
もし、デバッグするときに勝手にインストールされないようにするには、MSIXのプロジェクトではなく、プログラム本体(FormsやXAMLのexeアプリ)を選択してデバッグします。
やり方は以下。

メニューの下にあるパッケージの選択でアプリ本体(画像では①の方)を選択します。
この状態でデバッグします。
①はFomrsアプリ(もしくはXAMLアプリ)。②はMSIXパッケージ化用のプロジェクト。
ただし、この方法でデバッグすると、MSIXパッケージ化のみに動作するチェックができなくなります。
例えばMSIXパッケージ化すると、Windowsのスタートアップに登録するには、ClickOnceやexe単体で出力する方法とは違うやり方が必要ですが、これが動作しません。
公開は最後の最後
あとは「公開」は、デバッグを重ねて最後の最後に実行する。このルールを守れば、このインストールできないというエラーはお目にかからなくなると思います。
コメント