Zum Inhalt springen

mehrfach WinExec aufrufen


ono

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...