tomasK
tomasK

Reputation: 358

How to continue powershell script after executable crash and block

I have this simple script:

$files = dir .\configs | ? { !$_.PSIsContainer }

foreach($file in $files)
{
    try
    {
        .\MyApp.exe -ErrorAction Stop $file
    }
    catch
    {
         write-host "!!!!!!!!!!!!error!!!!!!!!!!!!!!"
         continue
    }   
}

The problem is that when

.\MyApp.exe -ErrorAction Stop $file

crash, the windows message box about application crash appear and my script block, catch is not hit and only way to continue is click Storno button in the message box.

So how to prevent blocking?

Upvotes: 3

Views: 2705

Answers (3)

Jonathan
Jonathan

Reputation: 21

I know this isn't a direct answer to the question, as if the application does not report its error, then it is possible that you might not be able to capture said error inside of powershell.

However, if the issue is that the dialog box is causing your script to halt, and you want it to continue anyway, you can disable the "MyApp.exe Has Stopped Working" error dialog box from popping up in windows which will allow your script to continue.

See this blog for more information: https://www.raymond.cc/blog/disable-program-has-stopped-working-error-dialog-in-windows-server-2008/

Upvotes: 2

stej
stej

Reputation: 29479

Several notes apply here:

  • This dialog is managed by operating system, so there is nothing about PowerShell. PowerShell can't do anything about it. You could use some automation to find a window and 'click' button, but that's really awkward.
  • Also applying parameters like -ErrorAction has no value. That applies only to functions/cmdlets (anything else?).
  • Applications are supposed to return 0 (success) or anything else (failure), they don't throw exceptions. In your case you can use $lastexitcode that contains the exit code of the application.

Note, that properly coded application should really return its exit code and may write something to console. If it fails horribly with that message box, there is no excuse. At least one big try/catch block in the Main function should be used.

Upvotes: 2

Shay Levy
Shay Levy

Reputation: 126932

.\MyApp.exe -ErrorAction Stop $file

On a side note, -ErrorAction has no meaning in legacy applications. It's a cmdlet parameter.

Upvotes: 1

Related Questions