パッケージ化されたデスクトップ アプリを配布する

デスクトップ アプリを MSIX パッケージでパッケージ化する (「コードからの MSIX パッケージの構築」を参照) 場合、パッケージにしたアプリケーションを Microsoft Store に公開したり、1 台以上のデバイスにサイドローディングしたりできます。

注意

パッケージ アプリケーションにユーザーを移行する方法について、計画はありますか? アプリを配布する前に、このガイドの「パッケージ アプリにユーザーを移行する」セクションを参照して、アイデアを得てください。

Microsoft Store に公開してアプリケーションを配布する

Microsoft Store は、お客様がアプリを取得する場合に便利な方法です。

Microsoft Store にアプリケーションを公開し、幅広いユーザーに届けます。 また、組織のお客様はビジネス向け Microsoft Store を通じてアプリケーションを入手し、組織内で配布できます。

Microsoft Store への公開を計画している場合は、申請プロセスの一部としていくつかの追加の質問をされます。 これは、パッケージ マニフェストで runFullTrust という名前の制限付き機能を宣言し、アプリケーションがその機能を使用するための承認を受ける必要があるためです。 この要件の詳細については、「制限付き機能」を参照してください。

Microsoft Store に提出する前に、アプリケーションに署名する必要はありません。

重要

Microsoft Store にアプリケーションを公開する場合は、Windows 10 S または Windows 11 S を実行するデバイスでアプリケーションが正しく動作することを確認してください。これは、Store 要件です。 Windows アプリの Windows 10 S または Windows 11 S 対応のテストに関する記事をご覧ください。

Microsoft Store に掲載せずにアプリケーションを配布する

ストアを使用せずにアプリケーションを配布する場合は、1 台または複数のデバイスにアプリを手動で配布できます。

この方法は、配布エクスペリエンスをきめ細かく制御する必要がある場合や、Microsoft Store の認定プロセスへの関与が望ましくない場合などに有効です。

アプリケーションをストアに掲載せずに他のデバイスに配布するには、証明書を取得し、その証明書を使ってアプリケーションに署名して、各デバイスにアプリケーションをサイドローディング展開する必要があります。

証明書を作成することも、Verisign などの大手ベンダーから取得することもできます。

Windows 10 S または Windows 11 S を実行するデバイスへのアプリケーション配布を計画している場合、Microsoft Store によるアプリケーションへの署名が必要であるため、デバイスへのアプリケーション配布を開始する前に、Microsoft Store 提出プロセスを実施する必要があります。

証明書を作成する場合は、アプリを実行する各デバイスの証明書ストア ("信頼されたルート" または "信頼されたユーザー") にインストールする必要があります。 大手ベンダーから証明書を取得する場合、システムにはアプリの他に何もインストールする必要はありません。

重要

証明書の発行元名がアプリの公開元名と一致することを確認してください。

その証明書を使ってアプリケーションに署名します。SignTool を使ってアプリケーション パッケージに署名する方法に関するページをご覧ください。

他のデバイスにアプリケーションをサイドローディング展開する方法については、「Windows での LOB アプリのサイドローディング」をご覧ください。

パッケージ アプリへのユーザーの移行

ユーザーによってパッケージ アプリが使用されるようにするには、アプリを配布する前に、パッケージ マニフェストにいくつかの拡張機能を追加することを検討してください。 次のようなことができます。

  • 既存のスタート タイルとタスク バー ボタンの参照先をパッケージ アプリに設定する。
  • パッケージ アプリケーションを一連のファイルの種類に関連付ける。
  • 特定の種類のファイルが既定でパッケージ アプリケーションによって開かれるように設定する。

拡張機能の完全な一覧と使用方法のガイダンスについては、「アプリにユーザーを移行する」を参照してください。

また、次のようなタスクを実行するコードをパッケージ アプリケーションに追加することも検討してください。

  • パッケージ アプリケーションの適切なフォルダーに、デスクトップ アプリに関連付けられているユーザー データを移行します。
  • アプリのデスクトップ バージョンをアンインストールするためのオプションをユーザーに示します。

これらのタスクについて、それぞれ説明します。 ユーザー データの移行から開始します。

ユーザー データの移行

ユーザー データを移行するためのコードを追加する場合、そのコードはアプリケーションを初めて起動したときにのみ実行することをお勧めします。 ユーザー データを移行する前に、ユーザーに対してダイアログ ボックスを表示して、何が起こっているか、なぜ移行が推奨されるのか、既存のデータにどのような影響があるかを説明します。

例として、.NET ベースのパッケージ アプリでの方法を次に示します。

private void MigrateUserData()
{
    String sourceDir = Environment.GetFolderPath
        (Environment.SpecialFolder.ApplicationData) + "\\AppName";

    if (sourceDir != null)
    {
        DialogResult migrateResult = MessageBox.Show
            ("Would you like to migrate your data from the previous version of this app?",
             "Data Migration", MessageBoxButtons.YesNo);

        if (migrateResult.Equals(DialogResult.Yes))
        {
            String destinationDir =
                Windows.Storage.ApplicationData.Current.LocalFolder.Path + "\\AppName";

            Process process = new Process();
            process.StartInfo.FileName = "robocopy.exe";
            process.StartInfo.Arguments = "%LOCALAPPDATA%\\AppName " + destinationDir + " /move";
            process.StartInfo.CreateNoWindow = true;
            process.Start();
            process.WaitForExit();

            if (process.ExitCode > 1)
            {
                //Migration was unsuccessful -- you can choose to block/retry/other action
            }
        }
    }
}

アプリのデスクトップ バージョンをアンインストールする

先に許可を求めずにユーザーのデスクトップ アプリケーションをアンインストールすることは、好ましくありません。 ユーザーに許可を求めるには、そのためのダイアログ ボックスを表示します。 ユーザーによって、アプリのデスクトップ バージョンをアンインストールしないように指定されることも考えられます。 その場合に、デスクトップ アプリの使用をブロックするか、両方のアプリケーションのサイド バイ サイド使用をサポートするかを決定する必要があります。

例として、.NET ベースのパッケージ アプリでの方法を次に示します。

このスニペットの完全なコンテキストを確認するには、「WPF picture viewer with transition/migration/uninstallation」というサンプルの MainWindow.cs ファイルを参照してください。

private void RemoveDesktopApp()
{
    //Typically, you can find your uninstall string at this location.
    String uninstallString = (String)Microsoft.Win32.Registry.GetValue
        (@"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion" +
         @"\Uninstall\{7AD02FB8-B85E-44BC-8998-F4803BA5A0E3}\", "UninstallString", null);

    //Detect if the previous version of the Desktop application is installed.
    if (uninstallString != null)
    {
        DialogResult uninstallResult = MessageBox.Show
            ("To have the best experience, consider uninstalling the "
              + " previous version of this app. Would you like to do that now?",
              "Uninstall the previous version", MessageBoxButtons.YesNo);

        if (uninstallResult.Equals(DialogResult.Yes))
        {
                    string[] uninstallArgs = uninstallString.Split(' ');

            Process process = new Process();
            process.StartInfo.FileName = uninstallArgs[0];
            process.StartInfo.Arguments = uninstallArgs[1];
            process.StartInfo.CreateNoWindow = true;

            process.Start();
            process.WaitForExit();

            if (process.ExitCode != 0)
            {
                //Uninstallation was unsuccessful - You can choose to block the application here.
            }
        }
    }

}

次のステップ

ご質問があるでしょうか。 テクニカル コミュニティにご連絡ください。

Microsoft Store へのアプリの公開で問題が発生した場合は、このブログ投稿で役に立つヒントを参照できます。