【问题标题】:get the exit code of a wpf application in powershell在 powershell 中获取 wpf 应用程序的退出代码
【发布时间】:2017-08-11 20:02:39
【问题描述】:

我正在尝试获取在 Powershell 脚本中调用的 wpf 应用程序的退出代码。

我在 WPF 中的主要工作:

[STAThread]
public static int Main(string[] args)
{
    if (args != null && args.Length > 0)
    {
        NB_ERRORS = AutomaticTests.Program.Main(args);
        return NB_ERRORS;
        //Application.Current.Shutdown(NB_ERRORS);
    }
    else
    {
        App app = new App();
        app.Run(new MainWindow());

        //Application.Current.Shutdown(NB_ERRORS);
        return NB_ERRORS;
    }
}

在 powershell 中我这样称呼它:

& $PathToExeTests 0 $LogTestsStagging
$nbFailed = $LASTEXITCODE

但它总是包含 0。

我尝试手动设置Environment.ExitCode,使用代码关闭应用程序,像这样覆盖 OnExit:

protected override void OnExit(ExitEventArgs e)
{
    e.ApplicationExitCode = AutomaticTests.GUI.Program.NB_ERRORS;
    base.OnExit(e);
}

但我在 LastExitCode 中总是有 0。

【问题讨论】:

  • 退出码默认为0...msdn.microsoft.com/en-us/library/…
  • 这就是为什么我试图设置一个自定义的,以便能够知道我在我的 WPF 应用程序中遇到了多少错误。
  • 我不知道在 power shell 中,但也许有类似于命令行的东西。在命令行中,您必须使用“start /wait [Application.exe]”运行应用程序,然后才能使用 %errorlevel% 来获取结果。也许power shell有类似的东西

标签: c# wpf powershell


【解决方案1】:

默认情况下,当您启动 GUI 应用程序时,PowerShell(就像 cmd.exe)不会等待应用程序退出;它只会告诉 Windows 开始加载应用程序,然后继续运行脚本。

有几种方法可以等待 GUI 应用退出。

选项 1:使用 Start-Process 启动应用程序,然后将生成的 Process 对象传递给 Wait-Process。这可以很容易地写成一个管道:

Start-Process $PathToExeTests -ArgumentList @(0, $LogTestsStaging) | Wait-Process

选项 2:如果您对应用程序的标准输出执行某些操作(将其分配给变量,或通过管道将其传递给另一个命令),则 PowerShell 将自动等待进程退出。

& $PathToExeTests 0 $LogTestsStaging | Out-Null

如果其他人要维护您的代码,选项 1 可能会更易读,但有时您也会看到选项 2。

【讨论】:

  • 这根本没有提到退出代码,但对于 googlers:对于 GUI 进程,您必须 -Wait -PassThru - 这确保进程对象的 $p.ExitCode 设置正确。更多详情 herehere
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
相关资源
最近更新 更多