WinUI 3 アプリを exe 直接起動する
はじめに
WinUI 3(Windows App SDK)デスクトップアプリ開発時に、exe ファイルをダブルクリックして起動する方法の整理です。
動作確認はこちらのプログラムで行っています。
挙動がよく分からない部分もあり、情報をお持ちの方はご教示いただけると幸いです。
基本
準備
新規プロジェクト作成時、「WinUI の Template Studio」テンプレートで作成します。
ウィザードの「機能」で「内蔵」を選択します。
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net9.0-windows10.0.19041.0</TargetFramework>
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
<RootNamespace>TestResumeDownload</RootNamespace>
<ApplicationIcon>Assets/WindowIcon.ico</ApplicationIcon>
<ApplicationManifest>app.manifest</ApplicationManifest>
<Platforms>x64</Platforms>
<RuntimeIdentifiers>win-x64</RuntimeIdentifiers>
<PublishProfile>Properties\PublishProfiles\win10-$(Platform).pubxml</PublishProfile>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UseWinUI>true</UseWinUI>
<EnableMsixTooling>true</EnableMsixTooling>
<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
</PropertyGroup>
なお、デフォルトで選択されている「MSIX パッケージ」は選択されたままにしておきます。
ターゲットフレームワーク(デフォルトだと .NET 7 のままです)や、プロジェクト内で使用している各種 NuGet パッケージは最新化します。
また、構成は Any CPU ではなく x64 にしています。
[デバッグ → デバッグの開始]メニューで Visual Studio から実行できることをまず確認します。
exe 実行
エクスプローラーでプロジェクトフォルダー配下の
bin\x64\(Debug または Release)\net9.0-windows10.0.xxxxx.0\win-x64\AppX
フォルダーを開き、exe ファイルをダブルクリックすると、作成した WinUI 3 アプリが起動します。
1 つ上の win-x64
フォルダーにも同内容の exe ファイルがあるので、そちらでも良いかもしれません。
挙動の違い
Visual Studio から実行した時と、exe 直接起動した時では、アプリの挙動が変わります。
具体的には、GetCurrentPackageFullName() の挙動が変わることは確認済です。
public Boolean IsMsix()
{
UInt32 length = 0;
WIN32_ERROR error = PInvoke.GetCurrentPackageFullName(ref length, null);
return !error.HasFlag(WIN32_ERROR.APPMODEL_ERROR_NO_PACKAGE);
}
その他にも変わる挙動があるかもしれません。
開発環境外での動作
AppX
フォルダーの内容を丸ごと Visual Studio がインストールされていない環境にコピーし、exe 起動してみたところ、起動しました。
しかし、先述の挙動の違いもありますし、後述のトラブルの可能性もありますので、exe 起動は開発時のみに留めて、配付は Microsoft Store 経由でのインストールにしたほうが良いのかなと個人的には思います。個人開発者でも Microsoft Store 配付は可能です。
トラブルシューティング
詳しい原因は分かっていませんが、基本通りやっても exe 起動しない場合があります。そのような場合は、以下を試してみると解決することがあります。
ショートカットから起動
AppX
フォルダー内の exe ファイルから適当な場所にショートカットを作成し、ショートカットから起動すると起動したりします。
一度ショートカットから起動すると、次回以降は exe からも起動するようです。
不要な開発中アプリの削除
WinUI 3 アプリをいろいろ作っていると、Windows スタートメニューの[設定 → アプリ →インストールされているアプリ]の中によく分からない名前(生のパッケージ名)で登録されていることがあります。
その中に競合があると exe 起動しない可能性があるので、競合していそうなものはアンインストールしてみると良いかもしれません。
確認環境
項目 | 環境 |
---|---|
OS | Windows 11 Pro 23H2 |
Visual Studio | 2022 17.13.1 |
.NET | 9.0 |
Template Studio for WinUI | 5.5 |
WinUIEx | 2.5.1 |
Windows App SDK | 1.6.250205002 (1.6.5) |
Discussion