4

私はちょっとした障害にぶつかりました。誰かが助けてくれることを願っています!

単体テスト ランナーとして機能するメトロ アプリケーションを作成しました。ビルド プロセスでの検証に使用できるように、このアプリケーションをヘッドレスで呼び出せるようにする必要があります。Metro アプリの仕組みは、一連の単体テストを実行し、テスト結果を含む XML ファイルを生成し、結果をユーザーに表示することです。

理想的には、metro アプリを実行し、テストを実行し、アプリを終了し、生成された XML ファイルで結果を読み取ることができる単純なスクリプトが必要です。これは可能ですか?もしそうなら、それを行う最善の方法は何ですか?

より具体的な質問は次のとおりです。

  1. メトロアプリをヘッドレスで起動するにはどうすればよいですか?メトロアプリには、ユーザー入力を待たないようにこれを検出する方法がありますか?

  2. 外部プロセスからメトロ アプリのパッケージ内のファイルにアクセスすることは可能ですか?

編集 - 回避策は、カスタム Visual Studio テスト ランナーを作成し、ビルドごとにテストを自動的に実行する方法を見つけることです。IDE 内でこれを実行できることはわかっていますが、スクリプトでこれを実行する方法があるかどうかはわかりません。

4

3 に答える 3

4

あなたはこの問題をずっと前に乗り越えたと思いますが、これをやろうとしている他の人のために、あまり手間をかけずに機能するようにしました。自動化されたヘッドレス方式で Metro アプリを実行するために、Metro アプリの名前を取得し、IApplicationActivationManagerインターフェイスを使用してそれを起動する単純なデスクトップ コマンド ライン ユーティリティを作成しました。その後、スクリプトからそのユーティリティを呼び出すことができます。

そのインターフェイスのActivateApplicationメソッドの 2 番目の引数は、アクティブ化されたアプリに渡される文字列で、コマンド ライン引数のようなものです。これは、アプリのハンドラーが受け取る のArgumentsプロパティとして表示されます。Visual Studio テンプレート プロジェクトでの の既定の実装は、この値をに最初に移動したときに に渡します。この値は、 のプロパティとしてハンドラーに渡されます。より便利な場所で捕まえることができます。LaunchActivatedEventArgsOnLaunchedOnLaunchedMainPageOnNavigatedToParameterNavigationEventArgs

私のランチャー ユーティリティは、ハードコードされたフラグをそこに渡し、独自のコマンドライン引数を転送します。これにより、最上位のスクリプトが任意のデータを Metro アプリに渡すことができます。アプリはそのデータを使用して、ヘッドレスで実行されていることを認識し、テストを実行できます。任意の種類の結果データをそのフォルダーの 1 つ ( LocalFolder など) に吐き出すことができ、デスクトップ アプリはそこから読み取ることができます%LOCALAPPDATA%\Packages\APPNAME\LocalState。アプリの起動後に結果ファイルが表示されるまで待機するようにランチャー ユーティリティをセットアップし、それらを使用して独自の終了コードを決定します。ランチャー ユーティリティは後でアプリを強制終了することはできませんが、CoreApplication.Exitを介して完了すると、アプリはそれ自体を強制終了できます。

そのセットアップはしばらくの間うまくいきましたが、私が今直面している問題は、アプリが常にフォアグラウンドで起動されるとは限らず、フォアグラウンド アプリでなくなった後にランタイムがアプリを中断/終了することですある程度の時間 (現在は ~10 ~ 15 秒)。そのため、時間がかかりすぎるテストは、このアプローチでは機能しません。まだ発見していないいくつかの回避策 (この質問に出くわしたときに探していたもの) を除きます。

于 2013-07-25T16:49:28.490 に答える
1

私はあなたがそれをすることができるとは思わない。

これは、WPFアプリをヘッドレスで実行しようとするのと同じ種類の問題ですが、Metroサンドボックスセキュリティモデルにも対処する必要があるため、より困難です。

PS間違っていることが証明されて幸せです!

于 2012-04-18T23:48:24.750 に答える
0

いいえ、申し訳ありません。そもそも、Metro アプリケーションを「ヘッドレス」モードで実行するスクリプトの最初の要件で壁にぶつかりました。2 番目の要件は、次の壁になります。あるアプリケーションは、別のアプリケーション/スレッド/プロセスを監視することはもちろん、見ることもできません。次に、3番目の要件も不可能です。アプリケーション内のファイルは分離されています。デスクトップ アプリの良い候補を見つけたようですね。そうは言っても、ダッシュボードであるコンパニオン Metro アプリケーションを使用できないと誤解しないでください。実行コアを WinRT サンドボックス内でホストできないだけです。

于 2012-05-22T14:10:02.247 に答える