000
13.08.2003, 19:36 Uhr
Uwe
C/C++ Master (Administrator)
|
Hallo, Grüble schon eine gute Stunde über folgende Problematik: Ich habe zwei Routinen in welchen eigentlich selbiges geschieht(der Aufruf von Calc.exe ist hier nur der Demo wegen), aber die Ergebnisse anders ausfallen. Variante 1:
C++: |
void CMySetupDlg::OnStartFakeSetup() { STARTUPINFO siStartupInfo; PROCESS_INFORMATION piProcessInfo;
memset(&siStartupInfo, 0, sizeof(siStartupInfo)); memset(&piProcessInfo, 0, sizeof(piProcessInfo));
siStartupInfo.cb = sizeof(siStartupInfo);
if(CreateProcess("c:\\Windows\\system32\\notepad.exe", " example.txt", 0, 0, FALSE, CREATE_DEFAULT_ERROR_MODE, 0, 0, &siStartupInfo, &piProcessInfo)){ WaitForSingleObject(piProcessInfo.hProcess, INFINITE); CreateProcess("c:\\Windows\\system32\\calc.exe", " example.txt", 0, 0, FALSE, CREATE_DEFAULT_ERROR_MODE, 0, 0, &siStartupInfo, &piProcessInfo); ::CloseHandle(piProcessInfo.hThread); ::CloseHandle(piProcessInfo.hProcess); } }
|
Beim Testen der Routine funktioniert alles wie gewünscht, WaitForSingleObject() macht das was es soll - es wartet. Variante 2.
C++: |
void CMySetupDlg::OnStartSetup() { STARTUPINFO siStartupInfo; PROCESS_INFORMATION piProcessInfo;
memset(&siStartupInfo, 0, sizeof(siStartupInfo)); memset(&piProcessInfo, 0, sizeof(piProcessInfo));
siStartupInfo.cb = sizeof(siStartupInfo);
if(CreateProcess("Z:\\DISK1\\setup.exe", 0, 0, 0, FALSE, CREATE_DEFAULT_ERROR_MODE, 0, 0, &siStartupInfo, &piProcessInfo)){ WaitForSingleObject(piProcessInfo.hProcess, INFINITE); CreateProcess("c:\\Windows\\system32\\calc.exe", " example.txt", 0, 0, FALSE, CREATE_DEFAULT_ERROR_MODE, 0, 0, &siStartupInfo, &piProcessInfo); ::CloseHandle(piProcessInfo.hThread); ::CloseHandle(piProcessInfo.hProcess); } }
|
setup.exe ist ein InstallShield Setup, welches von meiner Routine aufgerufen wird. Hier aber steigt WaitForSingleObject() nach Start der setup.exe aus. Warum? Könnte hier zwar eine Hardcore Methode schreiben, aber das wäre unschön :) -- "Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."
Bis dann... Uwe |