diff --git a/Shelly.hs b/Shelly.hs
--- a/Shelly.hs
+++ b/Shelly.hs
@@ -824,7 +824,8 @@
     when (sPrintCommands state) $ echo cmdString
     trace cmdString
 
-    (ex, errs, outV) <- liftIO $ bracketOnWindowsError (sRun state state exe args)
+    (ex, errs, outV) <- liftIO $ bracketOnWindowsError
+      (sRun state state exe args)
       (\(_,_,_,procH) -> (terminateProcess procH))
       (\(inH,outH,errH,procH) -> do
         case mStdin of
@@ -858,10 +859,10 @@
       _                      -> takeMVar outV
 
   where -- Windows does not terminate spawned processes, so we must bracket.
-#if !defined(mingw32_HOST_OS)
+#if defined(mingw32_HOST_OS)
     bracketOnWindowsError = bracketOnError
 #else
-    bracketOnWindowsError acquire _ main = acquire >> main
+    bracketOnWindowsError acquire _ main = acquire >>= main
 #endif
 
 
diff --git a/shelly.cabal b/shelly.cabal
--- a/shelly.cabal
+++ b/shelly.cabal
@@ -1,6 +1,6 @@
 Name:       shelly
 
-Version:     0.15.3.2
+Version:     0.15.3.3
 Synopsis:    shell-like (systems) programming in Haskell
 
 Description: Shelly provides convenient systems programming in Haskell,
