あなたはこの問題をずっと前に乗り越えたと思いますが、これをやろうとしている他の人のために、あまり手間をかけずに機能するようにしました。自動化されたヘッドレス方式で Metro アプリを実行するために、Metro アプリの名前を取得し、IApplicationActivationManagerインターフェイスを使用してそれを起動する単純なデスクトップ コマンド ライン ユーティリティを作成しました。その後、スクリプトからそのユーティリティを呼び出すことができます。
そのインターフェイスのActivateApplicationメソッドの 2 番目の引数は、アクティブ化されたアプリに渡される文字列で、コマンド ライン引数のようなものです。これは、アプリのハンドラーが受け取る のArguments
プロパティとして表示されます。Visual Studio テンプレート プロジェクトでの の既定の実装は、この値をに最初に移動したときに に渡します。この値は、 のプロパティとしてハンドラーに渡されます。より便利な場所で捕まえることができます。LaunchActivatedEventArgs
OnLaunched
OnLaunched
MainPage
OnNavigatedTo
Parameter
NavigationEventArgs
私のランチャー ユーティリティは、ハードコードされたフラグをそこに渡し、独自のコマンドライン引数を転送します。これにより、最上位のスクリプトが任意のデータを Metro アプリに渡すことができます。アプリはそのデータを使用して、ヘッドレスで実行されていることを認識し、テストを実行できます。任意の種類の結果データをそのフォルダーの 1 つ ( LocalFolder など) に吐き出すことができ、デスクトップ アプリはそこから読み取ることができます%LOCALAPPDATA%\Packages\APPNAME\LocalState
。アプリの起動後に結果ファイルが表示されるまで待機するようにランチャー ユーティリティをセットアップし、それらを使用して独自の終了コードを決定します。ランチャー ユーティリティは後でアプリを強制終了することはできませんが、CoreApplication.Exitを介して完了すると、アプリはそれ自体を強制終了できます。
そのセットアップはしばらくの間うまくいきましたが、私が今直面している問題は、アプリが常にフォアグラウンドで起動されるとは限らず、フォアグラウンド アプリでなくなった後にランタイムがアプリを中断/終了することですある程度の時間 (現在は ~10 ~ 15 秒)。そのため、時間がかかりすぎるテストは、このアプローチでは機能しません。まだ発見していないいくつかの回避策 (この質問に出くわしたときに探していたもの) を除きます。