WPFで既定のアプリでファイルを開く方法


はじめに

既定のアプリでファイルを開くというのは、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で開きたいファイルのパスを指定します

以上で完了です。
実装はとても簡単なのですが、ここまでたどりつくのにいろいろと調べたりと、時間がかかったので、同じような方がいればその助けになればと思います。