diff --git a/ProcessWin32.c b/ProcessWin32.c
index ddf6a9514c94cde8335834269856454bbb55fec8..309a3f5f7f433b9f3be226c870adbebaea082002 100644
--- a/ProcessWin32.c
+++ b/ProcessWin32.c
@@ -975,10 +975,10 @@ int kwsysProcess_WaitForExit(kwsysProcess* cp, double* userTimeout)
                              &cp->ExitCode))
     {
     /* The child exited.  */
-    cp->State = kwsysProcess_State_Exited;
     if(cp->ExitCode & 0xC0000000)
       {
       /* Child terminated due to exceptional behavior.  */
+      cp->State = kwsysProcess_State_Exception;
       switch (cp->ExitCode)
         {
         case CONTROL_C_EXIT:          
@@ -1016,6 +1016,7 @@ int kwsysProcess_WaitForExit(kwsysProcess* cp, double* userTimeout)
     else
       {
       /* Child exited normally.  */
+      cp->State = kwsysProcess_State_Exited;
       cp->ExitException = kwsysProcess_Exception_None;
       cp->ExitValue = cp->ExitCode & 0x000000FF;
       }