Du hast dort eine Schleife. Und du rufst WaitForSingleObject immer wieder auf und wartest immer wieder 2 Sek. solange WAIT_TIMEOUT zurückkommt.
C:
do {
dwPriorityClass = 0;
if(strcmp(pe32.szExeFile, "Apache.exe")==0){
hProcess = OpenProcess( SYNCHRONIZE , FALSE, pe32.th32ProcessID );
if( hProcess != NULL ){
dwPriorityClass = GetPriorityClass( hProcess );
PROCESS_INFORMATION piA;
STARTUPINFO suiA;
suiA.cb =sizeof(STARTUPINFO);
suiA.lpReserved =0;
suiA.lpDesktop =NULL;
suiA.lpTitle =NULL;
suiA.dwX =0;
suiA.dwY =0;
suiA.dwXSize =0;
suiA.dwYSize =0;
suiA.dwXCountChars =0;
suiA.dwYCountChars =0;
suiA.dwFillAttribute =0;
suiA.dwFlags =STARTF_USESHOWWINDOW;
suiA.wShowWindow =SW_MINIMIZE;
suiA.cbReserved2 =0;
suiA.lpReserved2 =0;
if(CreateProcess(NULL,strApacheShutdown,NULL,NULL,FALSE,CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS,NULL,NULL,&suiA,&piA)==TRUE) {
CloseHandle(piA.hThread);
}
WaitForInputIdle(piA.hProcess, INFINITE);
while(WaitForSingleObject(piA.hProcess, 2000) == WAIT_TIMEOUT) {}
WaitForInputIdle(hProcess, INFINITE);
while(WaitForSingleObject(hProcess, 2000) == WAIT_TIMEOUT) {}
CloseHandle( hProcess );
}
}
} while( Process32Next( hProcessSnap, &pe32 ) );
Also die start.exe startet den apache, der Apache läuft aber unter meinem Userkonto und nicht unter SYSTEM oder so. Also wenn ich in den Taskmanager reinschaue, dann läuft der Apache unter (sagen wir mal XYZ, wenn mein Username XYZ ist). Das hattest du falsch verstanden, meinte nicht die start.exe läuft unter dem usernamen sondern der Apache.Nochmal: Du startest den Apache als Service. Demnach wird er unter dem Konto ausgeführt welches in den Serviceeigenschaften hinterlegt ist. Normalerweise ist das NT-Autorität\SYSTEM (und das ist auch gut so).
Es ist völlig unerheblich wie du den Apache startest und unter welchem Konto deine start.exe läuft.
Also bisher hatte ich es ja so gemacht, dass ich mit GetTempPath() den Temp-Path des Users bekommen hatte/wollte, dort liegt eine log.txt in der der strApacheShutdown-Path und die Kopf-/Fußzeile (Wert vor dem starten der start.exe, damit man es wieder auf diesen Wert setzen kann) eingetragen ist. Verstehe halt nicht so ganz wieso das so ein Unterschied ist, klicke ich die shutdown.exe per Hand an, bekomme ich den richtigen Temp-Pfad und ich kann strApacheShutdown aus der log.txt auslesen. Starte ich shutdown.exe beim Beenden des Internet-Explorer-Fensters bekomme ich C:\Windows als TempVerzeichnis zurück, dadurch findet er die log.txt nicht! Und somit kann ich den Apache nicht herunterfahren, weil ich nicht weiß, wo die Apache.exe und wo die httpd.conf liegt und die Kopf-/Fußzeile kann auch nicht zurückgesetzt werden. Ich hoffe, du kannst jetzt verstehen wieso ich unbedingt den User-Temppath bräuchte. Hast du eine Idee, wie ich ansonsten zum User-Temppath kommen könnte oder starte ich vielleicht den Internet Explorer falsch?Was hat denn der strApacheShutdown mit dem TempPath zu tun?
Gruß
Gruß