Druck von Windows Dienst

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 234
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 16 Mal
Danksagung erhalten: 4 Mal

Druck von Windows Dienst

Beitrag von Dominik Krebs »

Hallo zusammen,
ich habe vor von einem Windows Dienst aus eine bereits vorhandene Datei (PDF) zu drucken.
Der Dienst hat wurde bereits über einen Benutzer gestartet, der diverse Drucker installiert hat.
Ich möchte den Ausgebenden Drucker gerne als Parameter mit übergeben. Ich kann leider nichts passendes Finden.
Wer von euch hat so etwas schon umgesetzt?
Gruß Dominik
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 889
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 42 Mal
Danksagung erhalten: 206 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von Marcus Herz »

Du musst ja irgendwo definiert haben, über welches Programm der Druck ausführen werden soll. Meist über Extension Verknüpfung (WIe der Doppelklick)
Für deine Aufgabe musst du aber das Programm (Adobe, PDF24, etc.) mit in RunShell verwenden, diese Programme haben dann eine Parameterleiste, welche auch den Drucker übergeben kannst.
Google dazu z.B. Aufurf Parameter Acrobat" oder was immer du verwendest.
Gruß Marcus

Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von RolandG »

Hallo

am einfachsten ist es das PDF (oder andere Datei) auf einen freigegebenen Drucker zu kopieren, z.B.:
PDF-Datei: 1.pdf
Drucker Freigabename: OKI
Server: \\Server2021

copy 1.pdf \\server2021\oki

Gruß
Roland
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9481
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 112 Mal
Danksagung erhalten: 380 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von Tom »

Ich meine, Dominik will wissen, wie man einem Dienst die Information, welchen Drucker der Nutzer gerade gewählt hat, als Parameter übergibt. Was eine etwas irritierende Aufgabe ist, denn ein Dienst läuft ja die ganze Zeit und ist also längst (beim Rechnerstart) - falls nötig - mit Parametern gestartet worden. Dominik, Du solltest vielleicht ein wenig genauer erklären, wie das strukturiert ist.
Herzlich,
Tom
Benutzeravatar
azzo
1000 working lines a day
1000 working lines a day
Beiträge: 520
Registriert: So, 28. Mär 2010 19:21
Hat sich bedankt: 3 Mal
Danksagung erhalten: 17 Mal

Re: Druck von Windows Dienst

Beitrag von azzo »

Hallo Freunde,
Wie funktioniert so ein Dienst?

Ich habe es bisher immer so gelöst, dass ich ein Programm geschrieben habe, das ein Verzeichnis über einen Timer gesteuert überwacht. Zu druckende Dateien kopiere ich dann in den Ordner. Im Dateinamen übergebe ich den Druckernamen mit. Das Programm stellt dann den Standarddrucker auf den gewünschten um, druckt und stellt den Drucker wieder zurück.

Geht das mit einem Dienst einfacher bzw. wie funktioniert das?

LG
Otto
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von RolandG »

Hallo Otto,

das mit dem Windows Dienst ist wie mit Deinem Timer-Programm.
In die MS Windows Aufgabenplanung trägt man das auszuführende Kommando (Batch-Datei) ein,
wann, wie oft das Ganze gestartet werden soll (und weitere Abhängigkeiten).

Gruß
Roland
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9481
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 112 Mal
Danksagung erhalten: 380 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von Tom »

Hallo, Otto.

Ein Dienst unterscheidet sich von einem "normalen" Programm vor allem in diesen Aspekten:

1. Es gibt keine Nutzerinteraktion. Ein Dienst dient nur, er wartet auf Aufgaben und erledigt sie. Ein Dienst hat kein UI.
2. Der Dienst wird mit dem Betriebssystem gestartet. Er läuft die ganze Zeit, während auch der Rechner läuft. Das Betriebssystem selbst besteht zu einem Gutteil aus Diensten. Es ist nicht so leicht, einen Dienst zu beenden; je nach Rechten ist es manchmal unmöglich.
3. Ein Dienst arbeitet mit speziellen Rechten und nicht notwendigerweise denen der angemeldeten Benutzer. Damit stehen ihnen andere Ressourcen zur Verfügung.
4. Man kann Dienste (je nach Rechten) über die Verwaltung der Dienste oder über gesonderte Kontrollsoftware steuern. Ein Dienst, den viele von uns nutzen, ist der Advantage Database Server (Server sind ohnehin klassische Dienste), und die Advantage Configuration Utility, die eine normale Software ist, kann den Dienst steuern, also pausieren, stoppen, neu starten usw.

So ein "Druck-Watchdog" wäre also tatsächlich eine gute Aufgabe für einen Dienst. Die Frage, die hier gestellt wurde, ließe sich auf verschiedene Arten beantworten, aber dazu müsste man mehr darüber wissen, wie das systematisch aufgebaut ist, also wo die zu druckenden Dateien landen und was man sonst noch über sie weiß. Am einfachsten wäre, zu jeder zu druckenden Datei die Information zum Zieldrucker in einer Datei mit dem gleichen Namen, aber einer zusätzlichen Erweiterung zu liefern.
Herzlich,
Tom
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 234
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 16 Mal
Danksagung erhalten: 4 Mal

Re: Druck von Windows Dienst

Beitrag von Dominik Krebs »

Guten Morgen zusammen,
okay, ich gehe etwas weiter ins Detail.

Ich habe einen Windows Dienst der mittels einem HttpEndpoint() und WebHandler() auf verschiedenste https aufrufe wartet.
Einer dieser Aufrufe, sorgt beispielsweise dafür, dass ein Mitarbeiter mittels einem mobilen Endgeräts eine Reparaturvereinbarung für eine KFZ Werkstatt erstellen kann, wenn ein Fahrzeug dorthin eingeschleppt wird.

Diese Reparaturvereinbarung wird auf dem Dienst zu einem PDF umgewandelt und im Archiv abgelegt. Weiterhin soll diese, je nach dem für welche Abteilung die Vereinbarung gilt, in Moment der Erstellung auf einem bestimmten Drucker ausgegeben werden. Die Drucker werden in der Ini des Dienstes eingetragen.
Ich suche also einen Weg eine bereits vorhandene PDF auf einem Drucker meiner Wahl auszugeben. Der Standarddrucker spielt hier also keine Rolle.
Ungern möchte ich aber eine zusätzliche Anwendung wie beispielsweise den Acrobat o.ä installieren. Ich würde es natürlich machen wenn es keinen anderen Weg gibt, aber es gibt doch sicherlich einen DLL Aufruf den ich aus Xbase++ starten kann oder eine andere Lösung :)

@Roland
Wow, ich wusste gar nicht dass das geht. Bietet diese Option denn jeder Drucker ?
Gruß Dominik
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von RolandG »

Hallo Dominik,

der Drucker muss das nur können wenn Du am Treiber vorbeigehst. War früher notwendig wenn z.B. PCL/HPGL direkt auf HP-Drucker/Plotter ausgegeben werden musste.
Heute macht das der passende Win Druckertreiber, der muss dann auch PDF können. Geht auch schon bei älteren Druckern.
Einfach ausprobieren.

Gruß
Roland.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9481
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 112 Mal
Danksagung erhalten: 380 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von Tom »

Hallo, Dominik.

Wenn die Drucker "Direct PDF" unterstützen, kann man PDF-Dokumente direkt an diese Drucker senden. Sonst braucht man ein 3rd-Party-Dings.

Oder man macht es via Powershell, aber das habe ich aus einem Dienst heraus noch nie probiert (und ich würde auch eher bezweifeln, dass ein Dienst das kann):

Code: Alles auswählen

$printerName = <DruckerName>
$pdfPath = <DateiMitPfad>
Start-Process -FilePath $pdfPath -ArgumentList "/t", $pdfPath, $printerName -NoNewWindow -Wait
Edit: Windows-Dienste können - mit den richtigen Rechten ausgestattet - tatsächlich PS-Scripte ausführen lassen. Man muss aber beachten, dass der Dienst auch einen anderen Kontext hat. Er kennt u.U. nicht alle Drucker; das muss man entsprechend sicherstellen.
Herzlich,
Tom
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von RolandG »

Hallo Tom,

ich mache das aus Xbase++ heraus mit RunShell und copy oder wie schon geschrieben mit einer BAT-Schleife aus der MS Aufgabenplanung heraus.
Auch geht es mit verschiedene Verzeichnissen in denen die Dateien für bestimmte Geräte liegen.
Datei in Verzeichnis X (Dateiname egal) wird zu Gerät X kopiert, Dateien in Y zu Gerät Y usw.
Das läuft sogar noch auf alten 2003er Servern für 32-Bit Geräte. Da heißt das noch "geplante Tasks".
Vermutlich wirst Du recht haben dass das nicht jeder "Billigtreiber" machen wird und die Lösung damit nicht mit jedem Gerät funktioniert.

Warum soll ich für so einfache Sachen einen eigenen Dienst erstellen oder Powershell verwenden? Mit Copy kann das kann schon das alte "DOS".

Ich meine, dass aber ein freigegebener Drucker notwendig ist (geht ja auch Lokal). Auf einen nicht freigegebenen lokalen Drucker habe ich noch nicht versucht.

Gruß
Roland
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9481
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 112 Mal
Danksagung erhalten: 380 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von Tom »

Warum soll ich für so einfache Sachen einen eigenen Dienst erstellen oder Powershell verwenden?
Der Dienst, von dem Dominik spricht, ist ja zugleich ein Webserver. Und Powershell spricht m.E. die Druckertreiber an. Das geht mit einem einfachen COPY nicht. (BTW, die Softwaren, die man via Scheduler startet, sind keine Dienste.)
Herzlich,
Tom
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von RolandG »

Hallo Tom,

der Windows Scheduler ist doch schon ein Dienst. Den kann ich einfacher steuern wie einen eigenen Dienst.

Dominik erstellt PDF-Dateien (und archiviert diese).
Damit ist es egal wer die Dateien auf einen Drucker schickt und wie.
Das muss nicht der Webserver machen.
Vielleicht kann das ein/der Webserver (IIS?) nur mit Powershell? (copy-item?) das weiß ich nicht.

MfG
Roland
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9481
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 112 Mal
Danksagung erhalten: 380 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von Tom »

Hallo, Roland.

Dominik lässt die PDF-Dateien vom Server - den er geschrieben hat - erzeugen und will sie anschließend jeweils zu einem bestimmten Drucker schicken. Das kann er - wenn die Drucker Direct-PDF beherrschen - direkt tun, indem er die Datei zum Drucker sendet (vorausgesetzt, der Serverdienst sieht die Drucker auch) - oder per Powershell, weil dann der Treiber angesprochen wird. Ansonsten müsste er zusätzliche Komponenten einbinden oder den WebViewer2 für das jeweilige PDF ohne Fenster und mit dem Druckbefehl starten, das hatten wir hier auch schon (ich weiß aber nicht, ob wir das zusätzlich mit Ansteuerung eines bestimmten Druckers hatten).
(Ich mache sowas wie Dominik übrigens auch, drucke die PDFs aber via List & Label, das auch verwendet wird, um sie zu erzeugen.)

Du schlägst eine strukturelle Änderung seiner Prozesse vor, und dazu eine, die ein Rückschritt wäre, was die Kontrolle über die Prozesse anbetrifft.

Edit: Der Dienst (also der Server) darf nur nicht als lokaler Systemdienst laufen, weil er in diesem Fall keine Shares sehen und keine Netzwerkdrucker ansprechen könnte. Sonst würde es so funktionieren.
Herzlich,
Tom
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 234
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 16 Mal
Danksagung erhalten: 4 Mal

Re: Druck von Windows Dienst

Beitrag von Dominik Krebs »

RolandG hat geschrieben: Mo, 30. Sep 2024 16:52 Hallo

am einfachsten ist es das PDF (oder andere Datei) auf einen freigegebenen Drucker zu kopieren, z.B.:
PDF-Datei: 1.pdf
Drucker Freigabename: OKI
Server: \\Server2021

copy 1.pdf \\server2021\oki

Gruß
Roland
Ich habe es mal auf diese weise versucht.
Der Drucker druckt auch tatsächlich, jedoch ist das Bild viel zu klein und es kommt eine zweite Seite mit irgend einem Treiber Kaudawelsch raus.
Hab es auf zwei verschiedenen Druckern getestet, bei beiden das selbe.

Bei dem PowerShell Script bekomme ich den Hinweis, das die Ausführung untersagt ist. Ich denke das ich hier auch bei diversen Kundensystemen Probleme bekommen könnte.
Gruß Dominik
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von RolandG »

Hallo Dominik,

hast Du die PDF mit Xbase++ erstellt?
Ich mache das mit XbpPDF.
Und Grafik/Bild drauf.

Habe nochmal rumgespielt, bei beliebigen Bildern drauf klappt das tatsächlich nicht immer.
Mein neuerer OKI macht alles, der ältere Brother (Y>10J) nicht.

Gruß
Roland
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 234
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 16 Mal
Danksagung erhalten: 4 Mal

Re: Druck von Windows Dienst

Beitrag von Dominik Krebs »

Das PDF wurde aus Xbase Herraus mit dem Amiuny PDF Converter erstellt.

Ich brauche eine Lösung die zuverlässig auf egal welchem Drucker funktioniert.

Ein bisschen schade das es hier über den XbpPrinter() keine Möglichkeit gibt, beispielsweise über oPrinter:printFromFile() oder so ähnlich...
Gruß Dominik
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von RolandG »

Hallo Dominik,

das Problem scheint doch, dass Du X-beliebige fertige PDFs auf beliebige Drucker ausgeben musst/willst.
Da hilft schlussendlich wirklich nur ein Zusatzprogramm das PDF öffnen und drucken kann.

Ich hatte das Anfangs so verstanden, dass Du das PDF mit Xbase++ erstellst.
D.h. dass bisher Xbase++ mit der ganzen Anwendung nichts zu tun hat?

Dann versuche die PDFs mit Edgar Borger PDF Class zu öffnen und dannn zu drucken.
http://www.borger.com.br/softsupply/pdf/Xbasepdf.pdf
http://www.borger.com.br/softsupply/

Gruß
Roland
Dominik Krebs
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 234
Registriert: Mo, 15. Apr 2019 16:19
Hat sich bedankt: 16 Mal
Danksagung erhalten: 4 Mal

Re: Druck von Windows Dienst

Beitrag von Dominik Krebs »

Ich habe zwischenzeitlich auch mit Alaska kontakt gehabt.
Diese haben mir erzählt, dass Windows keinerlei Betriebssystemkomponente für das Verarbeiten, Anzeigen und Drucken von PDFs bietet.
und somit auf Betriebssystemebene auf keine API Komponente zurückgreifen kann.

Seitens Alaska ist hier wahrscheinlich nicht mit einer Problemlösung zu rechnen.

Ich werde wohl oder übel also über beispielsweise Adobe gehen müssen.
Gruß Dominik
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14703
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 23 Mal
Danksagung erhalten: 91 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von Jan »

Dominik,

was ist, wenn der Anwender keinen Adobe installiert hat? Dann schepperts.

Ich arbeite mit Edgars PDF-Klasse. Damit kannst Du eine PDF auf jeden beliebigen Drucker ausgeben. Dabei ist es vollkommen egal ob der Anwender irgend einen PDF-Viewer installiert hat oder welchen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von RolandG »

Hallo Dominik,

auf das was Jan schreibt hatte ich auch schon hingewiesen.
Wenn Du Xbase++ verwenden willst brauchst Du so eine Zusatz-LIB wie von Edgar.
Die kannst Du ja testweise runterladen.

Alternativ sollen Deine Kunden den von Dir empfohlen Drucker kaufen der direkt PDF verarbeiten kann.

MfG
Roland
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2165
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 31 Mal
Danksagung erhalten: 80 Mal

Re: Druck von Windows Dienst

Beitrag von Werner_Bayern »

Servus Dominik,

oder wir machen Dir ein kleines Tool in Windev, da ist ja bekanntlich alles mit dabei. PDF erzeugen, drucken etc. - alles kein Thema. Hab seit 2 Wochen einen Praktikanten da, der hat sich jetzt eingearbeitet und könnte das günstig machen :wink:
es grüßt

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2530
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 80 Mal

Re: Druck von Windows Dienst

Beitrag von ramses »

Werners Idee mit WinDev ist eine sehr gute Idee, da sind Dinge dabei von denen wir uns unter Xbase++ nicht mal zu Träumen getrauen ..... wenn du da die Möglichkeiten siehst fühlts du dich so wie Leute im 18 Jahrhundert die einen Jumbo (Boeing 747) rumgfliegen sehen würden ........
Valar Morghulis

Gruss Carlo
RolandG
UDF-Programmierer
UDF-Programmierer
Beiträge: 88
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Druck von Windows Dienst

Beitrag von RolandG »

Hi
nachdem von windev in den höchsten Tönen geschwärmt wird habe ich mir die "Werbung" für die "eierlegende Wollmilchsau" mal angeschaut.
Ich hatte auf den Webseiten und Anpreisungs-PDFs von PC Soft eher den Eindruck dass ich bei einer Art Otto/Quelle/Neckermann für poppige Programmoberflächen gelandet bin.
Das hat mein Interesse weiter in die Sache einzusteigen abrupt auf 0 reduziert... :(

Gruß
Roland
Benutzeravatar
azzo
1000 working lines a day
1000 working lines a day
Beiträge: 520
Registriert: So, 28. Mär 2010 19:21
Hat sich bedankt: 3 Mal
Danksagung erhalten: 17 Mal

Re: Druck von Windows Dienst

Beitrag von azzo »

Hallo Roland,
Hast du „Otto-Kaufhaus/Quelle/Neckermann“ bewusst als Metapher verwendet? Es passt einfach super.

LG
Otto


PS: Otto ist wirklich mein Vorname.
Antworten