Autor Thema: ShellExecute hält die weitere Ausführung von LS nicht auf  (Gelesen 1750 mal)

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Hallo an die HCL- / (Lotus-) Gemeinde,

ich muss einen alten Thread von mir wieder aufnehmen, weil das Thema inzwischen wieder aktuell geworden ist:

https://atnotes.de/index.php/topic,63265.msg403580.html

Ich will ein externes Programm aufrufen (PDF24-DocTool.exe), das PDF-Dateien, die sich in einem Verzeichnis befinden, zu einer PDF-Datei zusammenfasst, die ich dann per Mail weiterverschicke. Tode hat mich dankenswerterweise in dem Thread auf den Befehlt ShellExecute verwiesen, mit dem Hinweis, dass LS mit der Abarbeitung des Codes erst weitemacht, wenn das aufgerufene Programm beendet ist.

Leider ist dem nicht so, wie ich jetzt fesstellen musste. Es stimmt, dass das aufgerufene Programm einen Wert zurück gibt, aber wenn der Aufruf erfolgreich war und das externe Programm gestartet ist, läuft LS fröhlich weiter und verhakt sich dann irgendwann wegen Mehrfach-Aufrufen und der Löschung von Dateien in den Dokumentenverzeichnissen.

Hat der ShellExecute einen Parameter oder abfragbaren Rückgabewert, der LS anweisen könnte, auf die Beendigung (!) des aufgerufenen Programms zu warten?
Oder muss ich doch irgendwie Windows-Handler abfragen (keine Ahnung, wie), die feststellen, ob ein Programmfenster noch existiert?

Beim Vorschlag im Thread von tfrenz, eine Batchdatei laufen zu lassen, weiß ich nicht, wie ich den erwähnten "start /wait prog.exe"-Befehl aufrufen soll. Als Shell-Befehl? Und hielte der das LS an?

Ansonsten bliebe mir nur übrig zu versuchen, eine Warte-Schleife zu programmieren, die so lange läuft, bis die Ausgabedatei vorhanden ist. Dumm nur, wenn die gleich vom PDF24-Programm angelegt wird (mit Größe = 0 Byte) und erst im Nachhinein gefüllt wird. Dann ginge nur, die Dateigröße zu prüfen, aber ob ich an die herankomme...  :-:

Grüße
Frank
« Letzte Änderung: 07.04.22 - 14:26:32 von FrankLU »
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Antw:ShellExecute hält die weitere Ausführung von LS nicht auf
« Antwort #1 am: 06.04.22 - 19:13:31 »
Du brauchst ein ShellAndWait

Gucke mal in den code hier https://atnotes.de/index.php/topic,42869.msg275191.html#msg275191
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Antw:ShellExecute hält die weitere Ausführung von LS nicht auf
« Antwort #2 am: 07.04.22 - 14:26:18 »
Hallo eknori,

vielen Dank für den Link. Der Code ist etwas umfangreicher, da muss ich mich erst mal durchfinden und das heraussuchen, was ich verwenden werde.

Ich habe mir jetzt erst einmal mit einer programmierten Warteschleife geholfen, die so lange läuft, bis die zu erwartende Ausgabedatei da ist. Das PDF24-Programm gibt diese Ergebnisdatei erst zum Schluss seiner Arbeit aus, was natürlich sehr schön für mich ist. Trotzdem werde ich mir die ShellAndWait-Lösung angucken, weil sie mir sicherer erscheint als eine Schleife, die zu einer Endlos-Schleife werden könnte, wenn ein Programmfehler beim Packen durch PDF24 auftreten sollte.

Grüße
Frank
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Antw:ShellExecute hält die weitere Ausführung von LS nicht auf
« Antwort #3 am: 23.09.22 - 12:47:38 »
Hallo,

durch die Beschäftigung mit einem anderen Problem habe ich eine neue und ganz einfache Lösung zu diesem Problem gefunden:

Um ein externes Programm aufzurufen und das Script solange anzuhalten, bis das Programm wieder geschlossen ist, darf man es nicht über einen Shell-Befehl starten, sondern mit
Code
Set vShell = CreateObject("WScript.Shell")
retval = vShell.Run(sCommand, 2, True)
Grüße
Frank
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Antw:ShellExecute hält die weitere Ausführung von LS nicht auf
« Antwort #4 am: 25.09.22 - 06:37:01 »
Kann man so machen,. Hat die Lösung,die ich Dir im April vorgeschlagen habe nicht funktioniert?

Zitat
Du brauchst ein ShellAndWait

Gucke mal in den code hier https://atnotes.de/index.php/topic,42869.msg275191.html#msg275191
« Letzte Änderung: 26.09.22 - 06:23:41 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Antw:ShellExecute hält die weitere Ausführung von LS nicht auf
« Antwort #5 am: 28.09.22 - 11:46:20 »
Hallo eknori,

ich muss gestehen, dass ich bei dem anempfohlenen Thread nicht durch die vielen Declarations, Functions und Parameter durchgestiegen bin. Und für's Anpassen und Austesten hatte ich keine Zeit, zumal ich ja eine Lösung für mein April-Problem gefunden hatte. Bitte sei mir nicht böse.
Das mit dem WScript.Shell ist mit dem Programmaufruf ein Zweizeiler. Das erscheint mir doch wesentlich einfacher.

Grüße
Frank
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz