UWPアプリを自動テストする前段階として、
コマンドプロンプトから起動できるようにしておきます。
いろいろなやり方があるみたいなのですが、MSのサイトに記載されている
こちらのやり方でやってみました。
一応起動するようにはなったのですが、起動時に実行されるコードが通常とはちょっとだけ違うところに行くので、こちらの手順はやめることにしました。
ひとまず調べたので忘れないように記録だけしておきます。
---------------------------------------------
MSのサイトはこちら
https://docs.microsoft.com/ja-jp/windows/uwp/xbox-apps/automate-launching-uwp-apps
Step.1 準備
Visual StudioでUWPアプリのプロジェクトを開く。
Package.appxamanifestを開く。
宣言タブを開く。
使用可能な宣言で「プロトコル」を選択して、追加ボタンを押下。
名前を入力する。
Step.2 コマンドプロンプトで実行
start memotter:
のコマンドで起動ができるようになる。
ただし、これだけだとスプラッシュで止まってしまうので、
以下の手順が必要。
Step.3 OnActivatedの実装
App.xaml.csにOnActivated()を追加して、OnLaunched()の中身と似たようなものを追加すると、スプラッシュ以降も実行されるようになります。
このコードは下記のサイトとOnLaunched()の中身を参考にコードを書いてみました。
protected override void OnActivated(IActivatedEventArgs e)
{
base.OnActivated(e); // 先に継承元のメソッドを処理する
string argMessage = string.Empty; // Uriから取り出した文字列を格納する変数
if (e.Kind == ActivationKind.Protocol)
{
// プロトコルによって起動されたときは、e.KindがActivationKind.Protocolになっている。
// このときの引数eはProtocolActivatedEventArgsクラスなので、キャストして使用する
ProtocolActivatedEventArgs eventArgs = e as ProtocolActivatedEventArgs;
// 画面表示前にプロトコルを処理するなら、ここで行う
}
Frame rootFrame = Window.Current.Content as Frame;
// ウィンドウに既にコンテンツが表示されている場合は、アプリケーションの初期化を繰り返さずに、
// ウィンドウがアクティブであることだけを確認してください
if (rootFrame == null)
{
// ナビゲーション コンテキストとして動作するフレームを作成し、最初のページに移動します
rootFrame = new Frame();
rootFrame.NavigationFailed += OnNavigationFailed;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: 以前中断したアプリケーションから状態を読み込みます
}
// フレームを現在のウィンドウに配置します
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null)
{
rootFrame.Navigate(typeof(MainPage), argMessage);
}
// 現在のウィンドウがアクティブであることを確認します
Window.Current.Activate();
}
一応これでコマンドプロンプトからstart XXX:とすると起動ができるようになりました。 ただ、OnLaunched()が通常呼び出されるのに対してOnActivated()が呼び出されるため、 動作が変わるのことが気になってやめることにしました。

0 件のコメント:
コメントを投稿