Loading [MathJax]/extensions/tex2jax.js

2021年10月10日日曜日

UWPアプリ コマンドプロンプトから起動

 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()の中身を参考にコードを書いてみました。

  1. protected override void OnActivated(IActivatedEventArgs e)  
  2. {  
  3.     base.OnActivated(e); // 先に継承元のメソッドを処理する  
  4.   
  5.     string argMessage = string.Empty; // Uriから取り出した文字列を格納する変数  
  6.     if (e.Kind == ActivationKind.Protocol)  
  7.     {  
  8.         // プロトコルによって起動されたときは、e.KindがActivationKind.Protocolになっている。  
  9.         // このときの引数eはProtocolActivatedEventArgsクラスなので、キャストして使用する  
  10.         ProtocolActivatedEventArgs eventArgs = e as ProtocolActivatedEventArgs;  
  11.   
  12.         // 画面表示前にプロトコルを処理するなら、ここで行う  
  13.     }  
  14.   
  15.     Frame rootFrame = Window.Current.Content as Frame;  
  16.   
  17.     // ウィンドウに既にコンテンツが表示されている場合は、アプリケーションの初期化を繰り返さずに、  
  18.     // ウィンドウがアクティブであることだけを確認してください  
  19.     if (rootFrame == null)  
  20.     {  
  21.         // ナビゲーション コンテキストとして動作するフレームを作成し、最初のページに移動します  
  22.         rootFrame = new Frame();  
  23.   
  24.         rootFrame.NavigationFailed += OnNavigationFailed;  
  25.   
  26.         if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)  
  27.         {  
  28.             //TODO: 以前中断したアプリケーションから状態を読み込みます  
  29.         }  
  30.   
  31.         // フレームを現在のウィンドウに配置します  
  32.         Window.Current.Content = rootFrame;  
  33.     }  
  34.   
  35.     if (rootFrame.Content == null)  
  36.     {  
  37.         rootFrame.Navigate(typeof(MainPage), argMessage);  
  38.     }  
  39.     // 現在のウィンドウがアクティブであることを確認します  
  40.     Window.Current.Activate();  
  41. }  


一応これでコマンドプロンプトからstart XXX:とすると起動ができるようになりました。 ただ、OnLaunched()が通常呼び出されるのに対してOnActivated()が呼び出されるため、 動作が変わるのことが気になってやめることにしました。
0 件のコメント:
コメントを投稿