         arguments: [String],
         environment: [String: String],
         exitStatusCode: Int32,
+        normal: Bool,
         output: Result<[UInt8], Swift.Error>,
         stderrOutput: Result<[UInt8], Swift.Error>
     ) {
         let exitStatus: ExitStatus
       #if os(Windows)
-        exitStatus = .terminated(code: exitStatusCode)
+        if normal {
+            exitStatus = .terminated(code: exitStatusCode)
+        } else {
+            exitStatus = .abnormal(exception: UInt32(exitStatusCode))
+        }
       #else
         if WIFSIGNALED(exitStatusCode) {
             exitStatus = .signalled(signal: WTERMSIG(exitStatusCode))

            if result == -1 {
                self.state = .failed(SystemError.waitpid(errno))
            }
          #endif

            // Construct the result.

            switch result.exitStatus {
            case .terminated(let code):
                stream <<< "terminated(\(code)): "
#if os(Windows)
            case .abnormal(let exception):
                stream <<< "abnormal(\(exception)): "
#else
            case .signalled(let signal):
                stream <<< "signalled(\(signal)): "
#endif
