我正在尝试在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 :(得分: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。