Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Probleme mit ShellExecute und gsprint (https://www.delphipraxis.net/169140-probleme-mit-shellexecute-und-gsprint.html)

Nafetz 2. Jul 2012 10:40

Probleme mit ShellExecute und gsprint
 
Hallo,

ich habe Probleme beim Drucken von PDF-Dokumenten, die mich bald in den Wahnsinn treiben, weil ich mich schon seit Tagen damit herumschlage und das sich herauskristallisierende Problem aus meiner Sicht etwas mysteriös ist.

Ich möchte alle PDF-Dateien in einem Ordner ausdrucken und dann weglöschen. Dazu benutze ich Ghostwriter und Ghostviewer. Auf meinem Testrechner Windows XP läuft alles wie gewünscht. Der entscheidende Codeschnipsel lautet:

Delphi-Quellcode:
ShellExecute(0, 'open', PChar(strShellExecute),
                 PChar(' -landscape "' +
                 IncludeTrailingPathDelimiter(QuellpfadPDF) +
                 DateinamePDF + '"'), '', SW_HIDE);
Sleep(2000);
ShellFileOperation(IncludeTrailingPathDelimiter(QuellpfadPDF) +
                   DateinamePDF,
                   IncludeTrailingPathDelimiter(ZielpfadPDF) +
                   DateinamePDF,
                   FO_MOVE);
Die Variable strShellExecute hat den Wert 'C:\gs\Ghostgum\gsview\gsprint.exe'.

Tatsächlich soll das Progrämmchen jedoch auf einem Windows 2008 Server ausgeführt werden. Das funktioniert auch ganz prima, wenn man das Programm händisch ausführt (Doppelklick auf die exe). Wenn ich das Programm aber über die Geplante Tasks intervallartig laufen lasse, wird kein Druck ausgelöst. Das Programm startet aber laut TaskManager und verschiebt auch alle Dateien wie gewünscht. Die gsprint.exe scheint aber irgendwie nicht richtig auszulösen.

Hat jemand eine Idee, wo das hängen könnte?

himitsu 2. Jul 2012 11:07

AW: Probleme mit ShellExecute und gsprint
 
Zitat:

Die gsprint.exe scheint aber irgendwie nicht richtig auszulösen.
Die Rückgabewerte der beiden Funktionen sagen nichts aus? (falls man sie mal prüfen würde)


Laß eventuell auch mal das 'open' weg und ersetz es durch ein nil.


Zitat:

Tatsächlich soll das Progrämmchen jedoch auf einem Windows 2008 Server ausgeführt werden
Server haben teilweise ein paar etwas strängere Sicherheitsrichtlinien.
Taucht da irgendwas im Ereignislog auf? (Verwaltung > Computerverwaltung > Ereignisanzeige)



PS:
Delphi-Quellcode:
Sleep(2000)
wenn der Printer mal etwas länger braucht, dann wird es damit wohl nicht ganz funktionieren.
Ich würde da eher zu sowas wie ShellExecuteAndWait raten.

Nafetz 2. Jul 2012 16:19

AW: Probleme mit ShellExecute und gsprint
 
Hallo,

herzlichen Dank für die Antwort.
Ich muss zugeben, dass ich mit dem Projekt schon etwas über meinen Kenntnisstand als "Nicht-mehr-ganz-Frischling" hinausrutsche. Bei "ShellExecute" bin ich mir nicht mehr so ganz sicher, was ich da eigentlich mache.
Ich habe in jedem Fall mal 'open' mit nil ersetzt und habe keine Änderung im Verhalten: Programm läuft grundsätzlich. Wenn das Programm über "Geplante Tasks" ausgelöst wird , fehlen weiterhin die Drucke.
Derzeitige Notbehelslösung: Geplante Tasks werden an meinem XP-Rechner ausgeführt, der die exe auf meinem Rechner ausführt, dann die gsprint.exe auf meinem Rechner benutzt und im Anschluss die Dateien auf dem Server selbst verschiebt. Auf diesem Weg funktioniert alles einwandfrei.

Verdächtige Logeinträge habe ich nicht gefunden (da lasse ich aber nochmal jemand ran).

Die Rückgabewerte würde ich auch gerne anschauen. Um die zu bekommen, musste ich so etwas veranstalten, oder?

Bei der Sleep-Funktion sehe ich das Problem und habe im ersten Schritt, bis es mal grundsätzlich funktioniert, wenigstens auf 10000 ms erhöht - leider ohne Erfolg.


Nachtrag:
Inzwischen habe ich das Gefühl, doch im falschen Forum zu sein :-)
Ich habe eine Batch-Datei mit folgendem Inhalt erzeugt:
c:\gs\Ghostgum\gsview\gsprint.exe -landscape F:\Ordner\MeineDatei.pdf
Diese habe ich per Doppelklick ausgelöst -> Druck wird ausgelöst
Stupse ich die Batch-Datei über einen Geplanten Task an, kommt kein Druck.
Ich hoffe keinen Fehler beim Testen gemacht zu haben, aber in dem Fall wäre Delphi definitiv aus der Nummer raus.

Falls dennoch jemand einen Tipp hat wäre ich sehr dankbar.

himitsu 2. Jul 2012 18:04

AW: Probleme mit ShellExecute und gsprint
 
Zitat:

Zitat von Nafetz (Beitrag 1173184)
Falls dennoch jemand einen Tipp hat wäre ich sehr dankbar.

Zitat:

Zitat von himitsu (Beitrag 1173139)
Zitat:

Die gsprint.exe scheint aber irgendwie nicht richtig auszulösen.
Die Rückgabewerte der beiden Funktionen sagen nichts aus? (falls man sie mal prüfen würde)

Result + MSDN-Library durchsuchenGetLastError (Delphi-Referenz durchsuchenRaiseLastOSError / Delphi-Referenz durchsuchenSysErrorMessage)

Nafetz 3. Jul 2012 07:23

AW: Probleme mit ShellExecute und gsprint
 
Hallo,

wie bereits geschildert - ich suche inzwischen eine Ebene tiefer, da Delphi mit dem Problem ja nichts zu tun haben scheint.

Ich habe daher oben genannte batch-Datei mit folgendermaßen angepasst:
Code:
"c:\gs\Ghostgum\gsview\gsprint.exe" -landscape "F:\Ordner\MeineDatei.pdf" > testerrors.txt
Starte ich die batch-Datei per Doppelklick, enthält die generierte Textdatei folgenden Inhalt:
Zitat:

GPL Ghostscript 9.05 (2012-02-08)
Copyright (C) 2010 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
Substituting font Times-Roman for TimesNewRomanPSMT.
Loading NimbusRomNo9L-Regu font from %rom%Resource/Font/NimbusRomNo9L-Regu... 2591112 1226602 1630352 330175 3 done.
Substituting font Helvetica for ArialMT.
Loading NimbusSanL-Regu font from %rom%Resource/Font/NimbusSanL-Regu... 2591112 1260477 1650448 356060 3 done.
Copyright (C) 2003-2006, Ghostgum Software Pty Ltd. All Rights Reserved.
2006-02-24 gsprint 1.9
Page 1, PRINT
Starte ich die batch-Datei dagegen mit einem geplanten Task enthält die Textdatei nur noch:
Zitat:

Copyright (C) 2003-2006, Ghostgum Software Pty Ltd. All Rights Reserved.
2006-02-24 gsprint 1.9
Sieht irgendwie so aus, als ob in diesem Fall ghostscript nicht gefunden würde. Eine Änderung der batch-Datei in
Zitat:

"c:\gs\Ghostgum\gsview\gsprint.exe" -ghostscript "C:\gs\gs9.05\bin\gswin32c.exe" -landscape "F:\Ordner\MeineDatei.pdf" > testerrors.txt
brachte leider keine Änderung.

"Witzigerweise" habe ich eine Lösung hinbekommen, indem ich bei den geplanten Tasks einen Schalter "Run only when user is logged on" gesetzt habe. Allerdings ist das nicht akzeptabel, so dass ich immer noch suche, was das eigentliche Problem sein könnte.

Zumindest weiß ich inzwischen, dass das Problem in der Geschichte der Menschheit schon einmal aufgetreten ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz