はじめに
既定のアプリでファイルを開くというのは、Windowsを使っていると当たり前のような機能なのですが、WPFで実現しようとするとどうすればいいの?と思ってしまいます。
調べていくと、ファイルに応じた既定のアプリの起動というMicrosoftのドキュメントがありました。
ところが、これ、UWPのAPIを使用しています。つまりWPFではないわけです。
ということはWPFでUWPのAPIを使用できるようにすればいいということです。
UWPのAPIをWPFで使用できるようにする
実装方法ですが、.NetFrameworkを使用している場合と、.NET5を使用している場合とでは異なるようです。
.NetFrameworkの場合
Microsoft.Windows.SDK.ContractsというNuGetパッケージをインストールします
.NET5の場合
プロジェクトファイルを以下のように設定します
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Library</OutputType>
<TargetFramework>net5.0-windows10.0.17763.0</TargetFramework>
<UseWPF>true</UseWPF>
</PropertyGroup>
</Project>
TargetFrameworkのところがポイントで、
- net5.0-windows10.0.17763.0の場合は Windows 10 Version 1809
- net5.0-windows10.0.18362.0の場合は Windows 10 Version 1903
- net5.0-windows10.0.19041.0の場合は Windows 10 Version 2004
となります
この設定の留意事項としては、プロジェクトのプロパティの対象フレームワークがグレー表示になるところです。
既定のアプリでファイルを開く
これでWPFでも利用できる環境が整ったので実装ですが、これはシンプルで、以下のコードを使うだけ
IStorageFile file = await StorageFile.GetFileFromPathAsync(filePath)
await Windows.System.Launcher.LaunchFileAsync(file)
この引数のfilePathで開きたいファイルのパスを指定します
以上で完了です。
実装はとても簡単なのですが、ここまでたどりつくのにいろいろと調べたりと、時間がかかったので、同じような方がいればその助けになればと思います。