デスクトップ アプリを MSIX パッケージにパッケージ化する場合 (コードから MSIX パッケージをビルドする
注
パッケージ化されたアプリケーションにユーザーを移行する方法を計画していますか? アプリを配布する前に、このガイドの パッケージ アプリへのユーザーの移行 に関するセクションを参照して、いくつかのアイデアを得てください。
Microsoft Store に発行してアプリケーションを配布する
Microsoft Store
アプリケーションを Microsoft Store に公開して、最も幅広いユーザーにリーチします。 また、組織の顧客は、ビジネス向け Microsoft Store
Microsoft Store に公開する予定の場合は、申請プロセスの一環として、いくつかの追加の質問が表示されます。 これは、パッケージ マニフェストが runFullTrust
ストアに提出する前に、アプリケーションに署名する必要はありません。
重要
Microsoft Store にアプリケーションを発行する場合は、Windows 10 S または Windows 11 S を実行するデバイスでアプリケーションが正しく動作することを確認してください。これはストアの要件です。 「 Windows 10 S または Windows 11 S 用の Windows アプリをテストする」を参照してください。
Microsoft Store に配置せずにアプリケーションを配布する
ストアを使用せずにアプリケーションを配布する場合は、アプリを 1 つ以上のデバイスに手動で配布できます。
これは、配布エクスペリエンスをより詳細に制御する必要がある場合や、Microsoft Store 認定プロセスに関与したくない場合に意味があります。
ストアに配置せずにアプリケーションを他のデバイスに配布するには、証明書を取得し、その証明書を使用してアプリケーションに署名してから、それらのデバイスにアプリケーションをサイドロードする必要があります。
証明書
Windows 10 S または Windows 11 S を実行するデバイスにアプリケーションを配布する場合は、アプリケーションを 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 画像ビューアー
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.
}
}
}
}
次のステップ
質問がありますか? 技術コミュニティについてお問い合わせください。
Windows developer