2012-04-16 19 views
4

我已經打了一個有點障礙的,而且我希望有人能幫助!運行Metro應用headlessly

我寫了一個地鐵應用程序,它作爲一個單元測試運行,而我現在需要能夠headlessly調用這個應用程序,使其可以用於構建過程的驗證。 metro應用程序的工作方式是運行一系列單元測試,生成一個包含測試結果的XML文件,並將結果顯示給用戶。

理想情況下,我想有一個簡單的腳本,將運行Metro應用,執行測試,退出程序,然後還要讀取生成的XML文件中的結果的能力。這是可能的,如果是這樣,那麼最好的辦法是什麼?

這裏有一些更具體的問題:

  1. 怎麼能一個headlessly開始metro應用,並且在metro應用是有辦法來檢測這一點,以便它不會等待用戶輸入?

  2. 是否有可能從外部工藝包一個Metro應用內訪問文件?

編輯 - 解決方法是創建一個自定義的Visual Studio測試運行器,然後找到一種方法來自動運行與每個生成的測試。我知道這可以在IDE中完成,但我不確定是否有方法通過腳本執行此操作。

回答

1

我懷疑你就可以做到這一點。

這是同一類的問題,試圖headlessly運行一個WPF應用程序,但是很難,因爲你還不得不應對地鐵沙箱安全模型。

P.S.很高興被證明是錯誤的!

+0

是的,我一直在慢慢地認識到這一點。謝謝。 – Jeff 2012-04-19 00:34:28

0

不,對不起。您首先需要一個以「無頭」模式運行Metro應用程序的腳本,從而打開了牆壁。你的第二個要求是你的下一堵牆。一個應用程序看不到,更不用說監視另一個應用程序/線程/進程。那麼你的第三個要求也是不可能的。應用程序中的文件是孤立的。這聽起來像你找到了一個桌面應用程序的好候選人。話雖如此,不要錯誤地認爲你不能有一個伴隨你的儀表板的Metro應用程序。這只是執行核心無法託管在WinRT沙盒中。

4

我想你早已解決了這個問題,但爲了其他人想要這樣做,我沒有太多麻煩讓它工作。爲了以自動/無頭的方式執行Metro應用程序,我編寫了一個簡單的桌面命令行實用程序,該實用程序採用metro應用程序的名稱並使用IApplicationActivationManager界面來啓動它。然後我可以從腳本調用該實用程序。

該接口的ActivateApplication方法的第二個參數是一個字符串,它被傳遞到激活的應用程序,有點像命令行參數。它顯示爲LaunchActivatedEventArgsArguments屬性,該屬性由應用程序的OnLaunched處理程序接收。在Visual Studio模板項目中,OnLaunched的默認實現在第一次導航到MainPage時將此值傳遞到OnNavigatedTo處理程序,作爲NavigationEventArgsParameter屬性。你可以在任何地方更方便地捕捉它。

我的啓動程序實用程序通過那裏傳遞一個硬編碼標誌,並轉發它自己的命令行參數。這允許頂層腳本將任意數據傳遞到Metro應用程序。該應用程序可以使用該數據來實現它的無頭運行並運行測試。它可以將任何類型的結果數據吐出到其中一個文件夾中(如LocalFolder),然後桌面應用程序可以從%LOCALAPPDATA%\Packages\APPNAME\LocalState中讀取。我將啓動器實用程序設置爲在啓動應用程序後等待結果文件出現,然後使用它們確定自己的退出代碼。之後,啓動程序實用程序無法殺死該應用程序,但該應用程序在通過CoreApplication.Exit完成時可能會自行終止。

該設置工作了一段時間,但我現在遇到的一個問題是,該應用程序不總是啓動到前臺,並且運行時將暫停/終止該應用程序後,它尚未前臺應用程序一段時間(目前約10-15秒)。因此,任何花費太長時間的測試都不適用於這種方法,除非我還沒有發現一些解決方法(當我遇到這個問題時我正在尋找)。

相關問題