在powershell中获取wpf应用程序的退出代码

时间:2017-03-20 13:50:48

标签: c# wpf powershell

我正在尝试在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。

1 个答案:

答案 0 :(得分: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。