Я пытаюсь запустить setup.exe, который сделан через install-shield с помощью приведенного ниже кода
DWORD ChildProcess(LPCSTR exePath, LPCSTR lpCmdLine ,BOOL showDialog, char* workingDir, BOOL bParentWait )
{
CWnd * handle = AfxGetMainWnd (); //handle to the main dialog box of mfc application
DWORD dwExitCode = -1;
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.lpVerb = "open";
ShExecInfo.lpFile = exePath; //setup.exe path, installer exe
if(bParentWait)
{
ShExecInfo.lpParameters = lpCmdLine;
ShExecInfo.nShow = SW_MINIMIZE;
}
else
{
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.lpParameters = NULL;
}
ShExecInfo.lpDirectory = workingDir;
ShExecInfo.hInstApp = NULL;
if (ShellExecuteEx(&ShExecInfo))
{
if(bParentWait)
{
handle->ShowWindow(SW_MINIMIZE);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
if(showDialog){
handle->ShowWindow(SW_RESTORE);
}
GetExitCodeProcess(ShExecInfo.hProcess, &dwExitCode);
}
else
{
CloseHandle(ShExecInfo.hProcess);
dwExitCode = 0;
}
}
return dwExitCode;
}
Проблема в том, что запущенное окно установки не появляется сверху. Любая помощь будет принята с благодарностью.
Спасибо
Я считаю, что проблема у вас есть, потому что setup.exe
порождает другой процесс, который выполняет последовательность UI (и, следовательно, показывает окна).
Других решений пока нет …