ほぼ 下記Blog通り↓。少しだけ変更している。
Desktop Bridge のアプリで UWP から同じパッケージ内の exe を起動する方法@かずきのBlog https://blog.okazuki.jp/entry/2018/02/09/204909
変更部分
- パッケージプロジェクトは作成しないようにした。
- UWPは、Uno Platformで作成
- WPFは、.Net Core3.1
※ Uno使っているけどUWP+WPFなのでWindows専用
Uno Platformでプロジェクト作成
Shared と UWP 以外は使わないのでアンロード
WPFアプリ追加
ソリューション選択 > 追加 > 新しいプロジェクト
WPFアプリを追加。(.Net Core)
UnoUwpWpf.Wpf4Uwp という名前でWpfプロジェクトを追加した。(重複しまくり)
WPF側:アプリの単一化(オプション)
パッケージプロジェクトを作成しないので、UWPアプリが見える箇所にWPFアプリファイルを渡してやる。
その際、ファイルが1個だと便利かな? と思っていれた。
↓
- プロファイル設定で「単一ファイルの作成」をチェック
- 一応「自己完結」モードに。(単一ファイルの時は自動で自己完結になるっぽいけど、一応)
- ReadyToRunとトリミングはわからん。なんかファイルサイズが小さくなりそう?
とりあえず1回 発行しておく。
できた。
UWP側:WPFファイルのコピー
さっき作成したexeファイルを、UWPのプロジェクト直下にコピーする。
UWPプロジェクト>プロパティ>ビルドイベント>ビルド前の編集
WPFのexe を、UWPのプロジェクトにコピー
※ 単一化してない場合は、フォルダごとコピーとかかも。
UWP側:WPFファイルをUWPの出力に含める
とりあえず1回ビルド(↑のコピーイベントを実施)
Wpf(exe)がUWPプロジェクトの直下にコピーされる。
コピーされたファイルをUWPプロジェクトに追加。
追加したWPFファイルのプロパティを開いて、「常にコピー」か「新しい場合はコピー」に出力設定を変更。
UWP側:Package.appxmanifest の編集
runFullTrust を追加。
Executable は相対パスだと思う。
単一化していない(フォルダをコピーしている)場合や、デバッグ設定によってはズレてくるかも。
ズレていれば、ビルドのときに「そのexe無くない?」ってエラーにしてくれる。親切。
=== ここから先は、ほぼ かずきさんのBlog通り ===
UWP側:SDK参照
Windows Desktop Extensions for the UWP にチェックし、追加。
UWP側:ボタン押したらWPF起動するようコーディング
Shared プロジェクトのMainPage.xaml.cs <Grid> <Button Margin="20" Click="BtnClick" Content="Launch Wpf" FontSize="30" /> </Grid> Shared プロジェクトのMainPage.cs private async void BtnClick(object sender, RoutedEventArgs e) { #if WINDOWS_UWP await Windows.ApplicationModel.FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync(); #endif }
UWP側:起動
起動してボタン押せばWPFが起動する。
おわり