gpt4 book ai didi

file-io - headless (headless)运行 Metro 应用程序

转载 作者:行者123 更新时间:2023-12-05 01:29:17 26 4
gpt4 key购买 nike

我遇到了一些障碍,希望有人能提供帮助!

我编写了一个作为单元测试运行器的 Metro 应用程序,现在我需要能够 headless (headless)调用此应用程序,以便在构建过程中将其用于验证。 Metro 应用程序的工作方式是运行一堆单元测试,生成一个包含测试结果的 XML 文件,并将结果显示给用户。

理想情况下,我将有一个简单的脚本来运行 Metro 应用程序、执行测试、退出应用程序,然后能够读取生成的 XML 文件中的结果。这可能吗?如果可以,最好的方法是什么?

以下是一些更具体的问题:

  • 如何 headless (headless)启动 Metro 应用程序,在 Metro 应用程序中是否有一种方法可以检测到这一点,使其不等待用户输入?
  • 是否可以从外部进程访问 Metro 应用程序包中的文件?

  • 编辑 - 一种解决方法是创建一个自定义 Visual Studio 测试运行程序,然后找到一种方法在每次构建时自动运行测试。我知道这可以在 IDE 中完成,但我不确定是否有办法用脚本来做到这一点。

    最佳答案

    我想你早就解决了这个问题,但是为了其他人想要这样做,我让它工作起来没有太多麻烦。为了以自动化/ headless (headless)方式执行 Metro 应用程序,我编写了一个简单的桌面命令行实用程序,它采用 Metro 应用程序的名称并使用 IApplicationActivationManager界面启动它。然后我可以从脚本中调用该实用程序。

    该接口(interface)的第二个参数 ActivateApplication方法是传递给激活的应用程序的字符串,有点像命令行参数。它显示为 Arguments LaunchActivatedEventArgs 的属性(property)由应用程序的 OnLaunched 接收处理程序。 OnLaunched 的默认实现在 Visual Studio 模板项目中将此值传递给 MainPage当它第一次导航到它时,它会进入 OnNavigatedTo处理程序为 Parameter NavigationEventArgs 的属性(property).你可以在任何一个更方便的地方捕获它。

    我的启动器实用程序通过那里传递一个硬编码的标志,以及转发它自己的命令行参数。这允许顶级脚本将任意数据向下传递到 Metro 应用程序。该应用程序可以使用该数据来实现它正在 headless (headless)运行并运行其测试。它可以将您喜欢的任何类型的结果数据吐到它的一个文件夹中(例如它的 LocalFolder ),然后桌面应用程序可以从 %LOCALAPPDATA%\Packages\APPNAME\LocalState 中读取这些数据。 .我将启动器实用程序设置为在启动应用程序后等待结果文件出现,然后使用它们来确定自己的退出代码。启动器实用程序之后无法终止应用程序,但应用程序可以在通过 CoreApplication.Exit 完成后自行终止。 .

    该设置在一段时间内运行良好,但我现在遇到的一个问题是应用程序并不总是启动到前台,并且运行时将在它不是前台应用程序后暂停/终止应用程序一些时间(目前约 10-15 秒)。因此,任何需要太长时间的测试都不适用于这种方法,除非我还没有发现一些解决方法(当我遇到这个问题时我正在寻找它)。

    关于file-io - headless (headless)运行 Metro 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10179135/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com