You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.9 KiB
77 lines
1.9 KiB
/*
|
|
Astub.cpp
|
|
*/
|
|
|
|
#include "windows.h"
|
|
#include "shlwapi.h"
|
|
#include "badstrfunctions.h"
|
|
|
|
#define ARRAYSIZE(_exp_) (sizeof(_exp_) / sizeof(_exp_[0]))
|
|
|
|
static LPCTSTR c_rgszEXEList[] =
|
|
{
|
|
TEXT("internal.exe\" /Q"),
|
|
TEXT("wabinst.exe\" /R:N /Q"),
|
|
TEXT("setup50.exe\" /app:oe /install /prompt"),
|
|
#if defined(_X86_)
|
|
TEXT("polmod.exe\" /R:N /Q"),
|
|
#endif
|
|
};
|
|
|
|
|
|
BOOL CreateProcessAndWait(LPTSTR pszExe, DWORD *pdwRetValue)
|
|
{
|
|
BOOL fOK = FALSE;
|
|
PROCESS_INFORMATION pi;
|
|
STARTUPINFO sti;
|
|
|
|
// Initialize
|
|
ZeroMemory(&sti, sizeof(sti));
|
|
sti.cb = sizeof(sti);
|
|
*pdwRetValue = 0;
|
|
|
|
if (CreateProcess(NULL, pszExe, NULL, NULL, FALSE, 0, NULL, NULL, &sti, &pi))
|
|
{
|
|
WaitForSingleObject(pi.hProcess, INFINITE);
|
|
GetExitCodeProcess(pi.hProcess, pdwRetValue);
|
|
CloseHandle(pi.hThread);
|
|
CloseHandle(pi.hProcess);
|
|
|
|
fOK = TRUE;
|
|
}
|
|
|
|
return fOK;
|
|
}
|
|
|
|
|
|
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
|
{
|
|
TCHAR szExe[MAX_PATH];
|
|
int iEnd, i;
|
|
DWORD dw;
|
|
BOOL fNeedReboot = FALSE;
|
|
|
|
// Figure out the dir we are running from
|
|
// Start with a quote so we can wrap the filename to deal with spaces
|
|
// Trailing quote is embedded in the string to run.
|
|
szExe[0] = TEXT('\"');
|
|
GetModuleFileName(NULL, &szExe[1], ARRAYSIZE(szExe) - 1);
|
|
PathRemoveFileSpec(&szExe[1]);
|
|
iEnd = lstrlen(szExe);
|
|
szExe[iEnd++] = '\\';
|
|
|
|
// Run each package sequentially
|
|
for (i = 0; i < ARRAYSIZE(c_rgszEXEList); i++)
|
|
{
|
|
// Append exe name and args to dir path
|
|
StrCpyN(&szExe[iEnd], c_rgszEXEList[i], ARRAYSIZE(szExe)-iEnd);
|
|
|
|
CreateProcessAndWait(szExe, &dw);
|
|
|
|
if (ERROR_SUCCESS_REBOOT_REQUIRED == dw)
|
|
fNeedReboot = TRUE;
|
|
}
|
|
|
|
return (fNeedReboot ? ERROR_SUCCESS_REBOOT_REQUIRED : S_OK);
|
|
}
|
|
|