diff --git a/BeefTools/RunAndWait/RunAndWait.cpp b/BeefTools/RunAndWait/RunAndWait.cpp
index d5d7b63a..6201356d 100644
--- a/BeefTools/RunAndWait/RunAndWait.cpp
+++ b/BeefTools/RunAndWait/RunAndWait.cpp
@@ -120,50 +120,59 @@ int main()
std::string cmdLine = useCmdLineStr;
- PROCESS_INFORMATION processInfo;
+ for (int pass = 0; pass < 2; pass++)
+ {
+ PROCESS_INFORMATION processInfo;
- STARTUPINFOA si;
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
- memset(&processInfo, 0, sizeof(processInfo));
+ STARTUPINFOA si;
+ ZeroMemory(&si, sizeof(si));
+ si.cb = sizeof(si);
+ memset(&processInfo, 0, sizeof(processInfo));
- si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
+ si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
- HANDLE stdOut;
- CreatePipe(stdOut, si.hStdOutput, false);
-
- HANDLE stdErr;
- CreatePipe(stdErr, si.hStdError, false);
+ HANDLE stdOut;
+ CreatePipe(stdOut, si.hStdOutput, false);
- si.dwFlags = STARTF_USESTDHANDLES;
+ HANDLE stdErr;
+ CreatePipe(stdErr, si.hStdError, false);
- DWORD startTick = GetTickCount();
- BOOL worked = CreateProcessA(NULL, (char*)cmdLine.c_str(), NULL, NULL, TRUE,
- flags, envPtr, NULL, &si, &processInfo);
+ si.dwFlags = STARTF_USESTDHANDLES;
- ::CloseHandle(si.hStdOutput);
- ::CloseHandle(si.hStdError);
+ DWORD startTick = GetTickCount();
+ BOOL worked = CreateProcessA(NULL, (char*)cmdLine.c_str(), NULL, NULL, TRUE,
+ flags, envPtr, NULL, &si, &processInfo);
- if (!worked)
- return 1;
+ ::CloseHandle(si.hStdOutput);
+ ::CloseHandle(si.hStdError);
- DWORD threadId;
- ProcParams stdOutParams = { stdOut, GetStdHandle(STD_OUTPUT_HANDLE) };
- HANDLE stdOutThread = ::CreateThread(NULL, (SIZE_T)128*1024, (LPTHREAD_START_ROUTINE)ReadProc, (void*)&stdOutParams, 0, &threadId);
+ if (!worked)
+ return 1;
- ProcParams stdErrParams = { stdErr, GetStdHandle(STD_ERROR_HANDLE) };
- HANDLE stdErrThread = ::CreateThread(NULL, (SIZE_T)128 * 1024, (LPTHREAD_START_ROUTINE)ReadProc, (void*)&stdErrParams, 0, &threadId);
+ DWORD threadId;
+ ProcParams stdOutParams = { stdOut, GetStdHandle(STD_OUTPUT_HANDLE) };
+ HANDLE stdOutThread = ::CreateThread(NULL, (SIZE_T)128 * 1024, (LPTHREAD_START_ROUTINE)ReadProc, (void*)&stdOutParams, 0, &threadId);
- while (true)
- {
- if (::WaitForSingleObject(processInfo.hProcess, 20) == WAIT_OBJECT_0)
- break;
+ ProcParams stdErrParams = { stdErr, GetStdHandle(STD_ERROR_HANDLE) };
+ HANDLE stdErrThread = ::CreateThread(NULL, (SIZE_T)128 * 1024, (LPTHREAD_START_ROUTINE)ReadProc, (void*)&stdErrParams, 0, &threadId);
+
+ while (true)
+ {
+ if (::WaitForSingleObject(processInfo.hProcess, 20) == WAIT_OBJECT_0)
+ break;
+ }
+ ::WaitForSingleObject(stdOutThread, INFINITE);
+ ::WaitForSingleObject(stdErrThread, INFINITE);
+
+ DWORD exitCode = 0;
+ ::GetExitCodeProcess(processInfo.hProcess, &exitCode);
+
+ printf("Exit code: %d\n", exitCode);
+ if ((exitCode == 0) || (pass == 1))
+ return exitCode;
+
+ printf("FAILED! Starting second attempt.\n");
}
- ::WaitForSingleObject(stdOutThread, INFINITE);
- ::WaitForSingleObject(stdErrThread, INFINITE);
- DWORD exitCode = 0;
- ::GetExitCodeProcess(processInfo.hProcess, &exitCode);
-
- return exitCode;
+ return 0;
}
\ No newline at end of file
diff --git a/BeefTools/RunAndWait/RunAndWait.vcxproj b/BeefTools/RunAndWait/RunAndWait.vcxproj
index 745fc383..56723c07 100644
--- a/BeefTools/RunAndWait/RunAndWait.vcxproj
+++ b/BeefTools/RunAndWait/RunAndWait.vcxproj
@@ -23,32 +23,32 @@
{BE0C7160-375C-4164-8388-BFCC6DAA7828}
Win32Proj
RunAndWait
- 10.0.16299.0
+ 10.0
Application
true
- v141
+ v143
Unicode
Application
false
- v141
+ v143
true
Unicode
Application
true
- v141
+ v143
Unicode
Application
false
- v141
+ v143
true
Unicode
@@ -151,9 +151,9 @@
true
-
+
-
+
diff --git a/bin/RunAndWait.exe b/bin/RunAndWait.exe
index a42fac1a..3d510f33 100644
Binary files a/bin/RunAndWait.exe and b/bin/RunAndWait.exe differ