I have just found that if I disable Vista's UAC. It can wait until the
process terminates.
program each time. I want the user to elevate once only (at the time of
installation or first time of execution). However, this is not the issue of
my original post.
Here is my code. It pops up a message box with text "Wait object". But I
can still see the dialog box of that process.
DWORD createProcess(CString applicationPath, CString parameter) {
STARTUPINFO startupInfo;
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
PROCESS_INFORMATION processInfo;
ZeroMemory(&processInfo, sizeof(processInfo));
DWORD returnCode = 0;
parameter = applicationPath + _T(' ') + parameter;
if (!CreateProcess(
NULL,
parameter.LockBuffer(),
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&startupInfo,
&processInfo)) {
returnCode = GetLastError();
}
parameter.UnlockBuffer();
switch (WaitForSingleObject(processInfo.hProcess, INFINITE)) {
case WAIT_ABANDONED:
AfxMessageBox(_T("Wait abandoned"));
break;
case WAIT_TIMEOUT:
AfxMessageBox(_T("Wait timeout"));
break;
case WAIT_OBJECT_0:
AfxMessageBox(_T("Wait object"));
break;
case WAIT_FAILED:
AfxMessageBox(_T("Wait failed"));
break;
}
CloseHandle(processInfo.hThread);
CloseHandle(processInfo.hProcess);
// zero if success
// non-zero if fail
return returnCode;
}
"Goran" <goran.pusic@gmail.com> ???
news:2c3cf2af-f739-4b5e-80c7-99176c19ed17@f10g2000vbf.googlegroups.com
???...
On Sep 16, 12:56 pm, "Kilo" <k...@yahoo.com.hk> wrote:
I have called CreateProcess to create a process. Then I called
WaitForSingleObject with INFINITE timeout. However, it does not wait.
It does. Chances are that your code is wrong.