diff options
Diffstat (limited to 'InstallShield/runexe.c')
-rw-r--r-- | InstallShield/runexe.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/InstallShield/runexe.c b/InstallShield/runexe.c new file mode 100644 index 0000000000..c1becfbcaa --- /dev/null +++ b/InstallShield/runexe.c @@ -0,0 +1,59 @@ +#include <stdarg.h> +#include <stdio.h> +#include <windows.h> + +const char *prog = "runexe"; + +#define BUFLEN 65537 + +void die(char *fmt, ...) +{ + va_list ap = va_start(ap, fmt); + + fprintf(stderr, "%s: ", prog); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); + exit(1); +} + +void warn(char *fmt, ...) +{ + va_list ap = va_start(ap, fmt); + + fprintf(stderr, "%s: ", prog); + vfprintf(stderr, fmt, ap); + 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; + sInfo.lpReserved2 = NULL; + sInfo.cbReserved2 = 0; + sInfo.lpDesktop = NULL; + sInfo.lpTitle = NULL; + sInfo.dwFlags = 0; + + 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); + 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; +} |