X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2FInstallShield%2Frunexe.c;h=c1becfbcaa7db5ce5b71641e27cf6a7829c64980;hb=20593d1d1cf47050d9430895a1c2ada6c39dfb98;hp=acdd5db9890a61f48fbb77d65f730ecc4e70af62;hpb=ebc3a6899acc6f6336750042612df23a41e1327c;p=ghc-hetmet.git diff --git a/ghc/InstallShield/runexe.c b/ghc/InstallShield/runexe.c index acdd5db..c1becfb 100644 --- a/ghc/InstallShield/runexe.c +++ b/ghc/InstallShield/runexe.c @@ -4,7 +4,7 @@ const char *prog = "runexe"; -#define BUFLEN 1025 +#define BUFLEN 65537 void die(char *fmt, ...) { @@ -26,12 +26,13 @@ void warn(char *fmt, ...) fprintf(stderr, "\n"); va_end(ap); } - + int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { STARTUPINFO sInfo; PROCESS_INFORMATION pInfo; TCHAR buf[BUFLEN]; + DWORD retCode; sInfo.cb = sizeof(STARTUPINFO); sInfo.lpReserved = NULL; @@ -41,10 +42,18 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmd sInfo.lpTitle = NULL; sInfo.dwFlags = 0; - if (GetCurrentDirectory(BUFLEN, buf) == 0) die("no parameters given"); - if (strlen(lpszCmdParam) == 0) warn("couldn't get current directory"); + if (GetCurrentDirectory(BUFLEN, buf) == 0) die("couldn't get current directory"); + if (strlen(lpszCmdParam) == 0) die("no parameters given"); warn("cwd: %s\n", buf); warn("runexing >>>%s<<<\n", lpszCmdParam); - CreateProcess(NULL, lpszCmdParam, NULL, NULL, FALSE, 0, NULL, NULL, &sInfo, &pInfo); - return 0; + if (!CreateProcess(NULL, lpszCmdParam, NULL, NULL, TRUE, 0, NULL, NULL, &sInfo, &pInfo)) + die("could not create process"); + + WaitForSingleObject(pInfo.hProcess, INFINITE); + if (GetExitCodeProcess(pInfo.hProcess, &retCode) == 0) retCode = -1; + CloseHandle(pInfo.hProcess); + CloseHandle(pInfo.hThread); + printf("return code %ld\n", retCode); + + return retCode; }