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