Priorität eines Programmes
-
Hallo!
Ich beschäftige mich noch nicht allzu lange mit Visual C++, deswegen wäre ich für eine Hilfe sehr dankbar!

Ich bin dabei eine MFC-Anwendung zu erstellen, wo der User Programme auswählen kann die installiert werden sollen. Das Programm übernimmt dabei sämtliche Tastatureingaben, das heißt es startet die exe-Datei, schreibt die Seriennummer rein, drückt Tasten usw.
Das haut auch alles hin!Sobald ich jetzt aber eine Installationsdatei mit "ShellExecute" ausführe und darauf warte, dass ein entsprechendes Fenster auf dem Bildschirm erscheint (beispielsweise wo der Pfad eingetragen werden soll), scheint es als ob die Ausführung der Installationsdatei angehalten wird. Das dauert so lange, bis mein Programm nach einer entsprechenden Zeitschleife, in der es auf das Fenster wartet, mit einer Fehlermeldung abbricht.

Ich denke es liegt daran, dass meinem Programm eine höhere Priorität als der EXE-Installationsdatei zugemessen wird und daher nichts passiert. Wie kann ich mein Programm so weit in der Rangfolge der Ausführung nach hinten schieben, bzw. die von mir gestartet Installationsdatei in der Priorität anheben.Danke für eine rasche Antwort!!!

-
Ich denke, das hat nichts mit Prioritäten zu tun. Zeig lieber mal deine "Zeitschleife".
-
Ui, das ging ja fix!

Hier ist die Schleife die darauf wartet, das ein entsprechendes Fenster aktiv wird.
// Testet, ob das angegebene Fenster existiert
bool FensterSuchen(CString Fenstername, int Wartezeit)
{
short int Zaehler=0;while (FindWindow(NULL, Fenstername)== NULL)
{
//Wartet die angegebene Zeit, wenn das Fenster noch nicht existiert
Sleep(1000);
Zaehler++;
if (Zaehler==Wartezeit) // nach dieser Sekundenzahl erfolgt der Abbruch
{
MessageBox(NULL, "Das folgende Fenster wurde nicht gefunden:\n\n'" + Fenstername + "'", "Fehler", MB_OK | MB_ICONSTOP);
return false;
}
}
return true;
}Aber wie gesagt, wenn ich beispielsweise eine normale mit WinZIP gepackte exe-Datei entpacken will, diese starte, ausführe und Tastatureingaben übergebe klappt das wunderbar!
-
Also folgendes, ich habe eben noch mal über den Taskmanager geschaut wie es mit der Priorität aussieht. Das Betriebssystem stellt die entsprechende auszuführende Setup-Datei ein ganzes Ende über meine MFC-Anwendung. Sie haben beide die normale Priorität.
Könnte es daran liegen, dass meine Sleep-Funktion dafür ausschlaggebend ist?Hat man eine Möglichkeit die Programmausführung so anzuhalten, dass es so gut wie keinen Speicher belegt und dann nach einem entsprechenden Intervall mit der Ausführung fortfährt?

-
Externes Programm starten oder läuft gestarteter Prozess noch?
Um jedoch die Gui nicht zu belassten das ganze noch in einen CWinThread und fragen ob der Thread noch läuft.[ Dieser Beitrag wurde am 03.06.2003 um 08:50 Uhr von Unix-Tom editiert. ]
-
Hi Unix-Tom!
Das sieht schon mal vielversprechend aus!

Nun habe ich aber folgendes Problem:
Wenn ich mit dem Befehl:
WaitForSingleObject(pi.hProcess, INFINITE);
warte, dass das entsprechende Fenster aktiv wird, passiert solange nichts, bis ich beispielsweise die aufgerufene Notepad-Datei schließe.
Ich möchte aber solange warten, bis der Prozess des Startens durchgelaufen ist. Das heißt, mein Programm soll so lange angehalten werden, bis die entsprechende Installationsdatei für Tastaturaufnahmen empfänglich ist.Wie sieht das genau mit dem CWinThread aus? Hast du dafür ein Codebeispiel?

-
Hmm, irgendwie scheine ich zu keiner Lösung zu kommen.

Ich arbeite jetzt mit dem Befehl: WaitForInputIdle um zu erfragen, ob das Fenster für Tastatureingaben bereit ist.
Nun ist es aber so, dass ein true-Wert zurückgeliefert wird, obwohl die Installationsdatei noch am Laden ist (kennt ja jeder diesen Forschrittsbalken).
Mein Programm kommt dann wieder in die Sleep-Schleife wo es auf das entsprechende Fenster von der Installations-Anwendung wartet. Und genau in dem Moment (egal wie lange ich die Sleep-Schleife laufen lasse) wo diese mit einer Fehlermeldung abbricht, läuft der Prozess der Installationsdatei weiter.Woran liegt das denn? Wartet Windows bis meine Anwendung mit der Sleep-Schleife beendet ist, bevor die Installationsroutine weiter läuft???

Das Kuriose ist ja, dass es mit einfachen Anwendungen die eine kurze Init-Sequence durchlaufen (wie beispielsweise das Notepad) funktioniert!
-
Hmm...kam keine rechte Hilfe hier zustande

Aber für alle anderen mit demselben Problem. Ich sag nur TIMER!!!
Jetzt klappt es *g*