ono Geschrieben 7. März 2005 Teilen Geschrieben 7. März 2005 Horrido, In einem Service soll in einer Schleife WinExec die gleiche Exe mit unterschiedlichen Parametern mehrmals hintereinander aufrufen. Dabei kommt es bei jedem Aufruf zu einer Wartezeit und anschliessender Meldung, wahrscheinlich wartet der aufrufende Prozess auf den Rückkehrcode. Wie kann man dies unterdrücken, so das die Exe-Aufrufe hintereinander zügig erfolgen? Oder auch wie kann man WinExec überzeugen, nicht zu warten und hintereinander die Exe mehrmals aufrufen? Oder gibt es andere Alternativen dafür und wie ist das zu realisieren( ShellExec, CreateProcess...)? Wäre wirklich dankbar für Tips Gruß ono Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. März 2005 Teilen Geschrieben 7. März 2005 Ein paar mehr Details wären nett. Wie lang ist denn die "Wartezeit"? Wie sieht dein Code aus? Der Wortlaut der "anschließenden Meldung" wäre auch interessant gewesen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Manfred.Becker Geschrieben 7. März 2005 Teilen Geschrieben 7. März 2005 Hi Horrido, das hier liefert die F1-Hilfe: This function is provided for compatibility with 16-bit Windows. Win32-based applications should use the CreateProcess function. Remarks In Win32, the WinExec function returns when the started process calls the GetMessage function or a time-out limit is reached. To avoid waiting for the time out delay, call the GetMessage function as soon as possible in any process started by a call to WinExec. Du solltest deshalb besser CreateProcess() verwenden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ono Geschrieben 7. März 2005 Autor Teilen Geschrieben 7. März 2005 Hossa, Klotzkopp und Manfred, ersteinmal herzlichen Dank für die prompte Reaktion. Also zum Code: Es soll vom Dienst ein paar Clients ("client.exe")gestartet werden die jeweils an unterschiedlichen Ports lauschen, Prinzip: OnStart(...) ... WinExec("client.exe 5678", SW_HIDE); WinExec("client.exe 7689", SW_HIDE); WinExec("client.exe 4239", SW_HIDE); Dabei wird dann bei jedem Aufruf eine Message generiert, in der Art "Access denied...". Dies wird sicherlich vom Service-Prozess ausgelöst, weil jeder Aufruf auf einen Rückkehrcode bis zum Time-Out wartet. Nach Quittierung der Message wird anstandslos der nächste Aufruf abgearbeitet, bis das Spielchen wie oben sich wiederholt. Nun möchte ich natürlich, daß WinExec nicht wartet sondern hintereinander die Aufrufe abarbeitet. Dabei bin ich inzwischen auch auf Manfreds Quelle gestoßen und probiere es mit der GetMessage() im Code der "client.exe". Nach dem Prinzip: LPMSG lpMsg; GetMessage( lpMsg, NULL, 0, 0); Aber da heult das System darüber, daß lpMsg in der 2.Zeile nicht definiert ist? Wenn das Problem mit CreateProcess() besser sich lösen läßt, wäre es prima, wenn Manfred einen kleinen Beispielcode hätte. Ich sehe leider noch nicht so richtig in der MSDN durch; dem Befehl ist auch kein Beispiel beigefügt. Oh diese Parameterliste, what is hi meaning??? ;-) Gruß ono Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. März 2005 Teilen Geschrieben 7. März 2005 ono, lass das mit GetMessage. Du scheinst nicht genug von Windowsprogrammierung zu verstehen, als dass dich das weiterbringen würde. Zu CreateProcess findest du hier im Forum jede Menge Beispiele. Benutzer aber bitte nicht eine Schleife mit GetExitCodeProcess, um das Ende des Prozesses abzuwarten. Dafür gibt es WaitForSingleObject. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ono Geschrieben 7. März 2005 Autor Teilen Geschrieben 7. März 2005 Ok, dann werde ich mal zunächst hier nach CreateProcess() schauen. Vielen Dank fürs erste ono Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.