diff options
Diffstat (limited to 'src/burn/engine/bundlepackageengine.cpp')
-rw-r--r-- | src/burn/engine/bundlepackageengine.cpp | 28 |
1 files changed, 3 insertions, 25 deletions
diff --git a/src/burn/engine/bundlepackageengine.cpp b/src/burn/engine/bundlepackageengine.cpp index 88a00f5e..0bee054f 100644 --- a/src/burn/engine/bundlepackageengine.cpp +++ b/src/burn/engine/bundlepackageengine.cpp | |||
@@ -251,7 +251,6 @@ extern "C" HRESULT BundlePackageEngineExecuteRelatedBundle( | |||
251 | ) | 251 | ) |
252 | { | 252 | { |
253 | HRESULT hr = S_OK; | 253 | HRESULT hr = S_OK; |
254 | int nResult = IDNOACTION; | ||
255 | LPCWSTR wzArguments = NULL; | 254 | LPCWSTR wzArguments = NULL; |
256 | LPWSTR sczArguments = NULL; | 255 | LPWSTR sczArguments = NULL; |
257 | LPWSTR sczArgumentsFormatted = NULL; | 256 | LPWSTR sczArgumentsFormatted = NULL; |
@@ -420,31 +419,10 @@ extern "C" HRESULT BundlePackageEngineExecuteRelatedBundle( | |||
420 | hr = EmbeddedRunBundle(sczExecutablePath, sczCommand, pfnGenericMessageHandler, pvContext, &dwExitCode); | 419 | hr = EmbeddedRunBundle(sczExecutablePath, sczCommand, pfnGenericMessageHandler, pvContext, &dwExitCode); |
421 | ExitOnFailure(hr, "Failed to run bundle as embedded from path: %ls", sczExecutablePath); | 420 | ExitOnFailure(hr, "Failed to run bundle as embedded from path: %ls", sczExecutablePath); |
422 | } | 421 | } |
423 | else // create and wait for the executable process while sending fake progress to allow cancel. | 422 | else |
424 | { | 423 | { |
425 | // Make the cache location of the executable the current directory to help those executables | 424 | hr = ExeEngineRunProcess(pfnGenericMessageHandler, pvContext, pPackage, sczExecutablePath, sczCommand, sczCachedDirectory, &dwExitCode); |
426 | // that expect stuff to be relative to them. | 425 | ExitOnFailure(hr, "Failed to run BUNDLE process"); |
427 | si.cb = sizeof(si); | ||
428 | if (!::CreateProcessW(sczExecutablePath, sczCommand, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, sczCachedDirectory, &si, &pi)) | ||
429 | { | ||
430 | ExitWithLastError(hr, "Failed to CreateProcess on path: %ls", sczExecutablePath); | ||
431 | } | ||
432 | |||
433 | do | ||
434 | { | ||
435 | message.type = GENERIC_EXECUTE_MESSAGE_PROGRESS; | ||
436 | message.dwUIHint = MB_OKCANCEL; | ||
437 | message.progress.dwPercentage = 50; | ||
438 | nResult = pfnGenericMessageHandler(&message, pvContext); | ||
439 | hr = (IDOK == nResult || IDNOACTION == nResult) ? S_OK : IDCANCEL == nResult ? HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT) : HRESULT_FROM_WIN32(ERROR_INSTALL_FAILURE); | ||
440 | ExitOnRootFailure(hr, "Bootstrapper application aborted during BUNDLE progress."); | ||
441 | |||
442 | hr = ProcWaitForCompletion(pi.hProcess, 500, &dwExitCode); | ||
443 | if (HRESULT_FROM_WIN32(WAIT_TIMEOUT) != hr) | ||
444 | { | ||
445 | ExitOnFailure(hr, "Failed to wait for executable to complete: %ls", sczExecutablePath); | ||
446 | } | ||
447 | } while (HRESULT_FROM_WIN32(WAIT_TIMEOUT) == hr); | ||
448 | } | 426 | } |
449 | 427 | ||
450 | hr = ExeEngineHandleExitCode(pPackage->Bundle.rgExitCodes, pPackage->Bundle.cExitCodes, dwExitCode, pRestart); | 428 | hr = ExeEngineHandleExitCode(pPackage->Bundle.rgExitCodes, pPackage->Bundle.cExitCodes, dwExitCode, pRestart); |