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

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