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 件のコメント:
コメントを投稿