theroyalty
Goto Top

Probleme beim Umleiten von DOS Druckbefehl

Mir wurde vor kurzem angetragen einem Bekannten zu helfen sein altes System zu retten. Dieses System ist ein altes DOS-Programm, geschrieben in Clipper, welches die gesamte Patientendatenbank enthält. Das Programm auf einem neuen Rechner zu starten ist ein leichtes, nachdem z.B. gewisse Werte in der Autoexec.bat angepasst wurden. Das einzige verbleibende und ungemein hinderliche Problem ist das Drucken aus dem DOS-Programm.

Ich habe mich eingehend mit bereits bestehenden Lösungsansätzen für ähnliche Probleme beschäftigt. Die Lösung ist im Prinzip immer dieselbe:

1. Drucker im Netzwerk freigeben
2. Per "net use lpt1 \\Computer\Drucker" Druckaufträge umleiten
3. In den Druckertreibern den Druckprozessor auf "winprint" "Text" stellen
4. Drucken

Das klappt auch wunderbar aus jeglicher Eingabeaufforderung, so druckt der Befehl "echo L >prn" brav ein Blatt Papier mit einem L.

Allerdings lässt das DOS-Programm weiterhin keine Druckarbeit zu.

Ich habe in diversen Beiträgen gelesen, dass in Clipper-(bzw. in DOS-)Anwendungen der Drucker extra eingestellt werden muss. Hierfür gibt es in besagtem Programm meines Erachtens nach keine Möglichkeit. Es lassen sich zwar Drucker-spezifische Einstellungen vornehmen, die erscheinen mir aber nur kosmetischer Natur zu sein, wie etwa das Einstellen der Zeilenlänge.

Auch Programme wie WinPrint, die Eingabeaufforderungen monitoren sollen, um Druckaufträge auf den Windows-Standarddrucker umzuleiten, ergaben keinen Erfolg.

Hat irgendjemand eine Ahnung was ich übersehen haben könnte?

Ich bin mit meinem Latein komplett am Ende.

Danke im voraus für jegliche Antwort,
Gruß

Content-Key: 141936

Url: https://administrator.de/contentid/141936

Printed on: April 23, 2024 at 12:04 o'clock

Member: problemsolver
problemsolver May 03, 2010 at 05:05:51 (UTC)
Goto Top
Moin,

es sieht meiner Meinung nach ganz danach aus, als wenn es ein "Anwendungsproblem" wäre.
Was ich mir vorstellen könnte ist, dass das Programm nicht die logische Schnittstelle LPT1 anspricht, sondern wirklich die "reele hardwareschnittstelle" mit IRQ und allem drum und dran.
Gibt es noch eine Programmdokumentation oder in den Einstellungen deiner Anwendung, was Dich weiterbringt?

Alternativ könnte ich empfehlen, dass Du die Festplatte mit einem passenden Kabel per USB an einen Rechner anschließt und daraus eine virtuelle Maschine machst...
Ich könnte mir vorstellen, wenn DOS als VM-Client läuft, dass dann durch das "Umbiegen" jeglicher Befehle das Hostbetriebssystem in der Lage wäre zu drucken?

Was meinst Du? Ich hoff mal, dass ich mich rel. verständlich ausgedrückt habe face-smile

Gruß

Markus
Member: Kaltom
Kaltom May 03, 2010 at 06:29:16 (UTC)
Goto Top
Morgen!

So ein ähnliches Problem habe ich vor kurzem auch gehabt.
Die Lösung habe ich in dem Programm DOSBox gefunden.
Es stellt auf einfache Art ein "richtiges" DOS unter Windows zur Verfügung und lässt sich über eine Config-Datei auf die eigenen Bedürfnisse anpassen.
Vor allem in der "erweiterten" Version mit Namen DOSBox Megabuild 5 lassen sich Druckbefehle ganz einfach auf die unter Windows installierten Drucker übertragen.

Hier der Link:
http://home.arcor.de/h-a-l-9000/

MfG
Member: TheRoyalty
TheRoyalty May 04, 2010 at 09:06:00 (UTC)
Goto Top
Ich hatte gerade einen ellenlangen Beitrag formuliert und kam dann aus Versehen auf einen der "Aktuelle Fragen"-Links im unteren Bereich. Verdammtes Touchpad. Also nochmal, und entschuldigt, falls ich nicht ganz so elaboriert antworte:

Danke ersteinmal für die Antworten.

Gibt es eine Möglichkeit mitzuloggen, welche Schnittstellen ein Programm anspricht? Bzw. könnte man ein solches Programm schreiben? Dann könnte ich mit Sicherheit sagen, ob die reelle LPT1 Schnittstelle angesprochen wird. Die Programmdokumentation ist sehr löchrig und nicht hilfreich.

Das DOS ist im Moment eine Eingabeaufforderung von Windows 7, was, wenn ich das richtig verstehe, ja ohnehin schon eine Emulation ist. Schlägst du vor ein Windows 7 in einer VM laufen zu lassen, oder ein natives DOS?

Bei der DOSBox fehlt mir die Möglichkeit, gewisse Einstellungen, die ich vornehmen muss, vorzunehmen. Ich muss die Autoexec.bat um den Wert "SET CLIPPER=F99" erweitern, und in der msconfig Files auf 100 erhöhen. Gibt es dir Möglichkeit in DOSBox? Ich habe dazu nichts finden können, und ohne diese Einstellungen gibt mir das Programm Fehler.

Ich hoffe auf weitere Antworten,
Gruß
Member: problemsolver
problemsolver May 04, 2010 at 16:13:29 (UTC)
Goto Top
Zitat von @TheRoyalty:
Ich hatte gerade einen ellenlangen Beitrag formuliert und kam dann aus Versehen auf einen der "Aktuelle Fragen"-Links im
unteren Bereich. Verdammtes Touchpad. Also nochmal, und entschuldigt, falls ich nicht ganz so elaboriert antworte:

Danke ersteinmal für die Antworten.

Gibt es eine Möglichkeit mitzuloggen, welche Schnittstellen ein Programm anspricht? Bzw. könnte man ein solches Programm
schreiben? Dann könnte ich mit Sicherheit sagen, ob die reelle LPT1 Schnittstelle angesprochen wird. Die
Programmdokumentation ist sehr löchrig und nicht hilfreich.
ja. sysinternals PortMon ist hierfür sicherlich passend. http://technet.microsoft.com/de-de/sysinternals/bb896644.aspx


Das DOS ist im Moment eine Eingabeaufforderung von Windows 7, was, wenn ich das richtig verstehe, ja ohnehin schon eine Emulation
ist. Schlägst du vor ein Windows 7 in einer VM laufen zu lassen, oder ein natives DOS?
das "DOS" in Win7 ist emuliert. Aus Kompatibilitätsgründen wirds mitgeschleift. Wird zukünftig ersetzt durch PowerShell.
Ich schlage vor, dass Du das native DOS in einer virtuellen Maschine laufen lässt. Hierfür zwei Fallbeispiele:
1. Bau die Festplatte aus und sichere sie mit passendem USB to IDE/SATA Kabel und mit Hilfe von z.B. Acronis True Image in ein Image File. Dieses Image File kannst Du dann mit der Boot CD in die virtuelle Maschine wieder zurückbringen... einfach die umgekehrte Reihenfolge.
2. Erstelle eine neue virtuelle Maschine mit VMware/VirtualBox/etc. und installiere dort dein DOS und übernehme händisch (wie auch immer) die Daten ...

Du brauchst dir normalerweise um PortMon keine Gedanken mehr machen, sobald du den physikalischen DOS Rechner in eine virtuelle Maschine umgewandelt hast... in der virtuellen Maschine sollten ebenfalls serielle und parallele (virtuelle) Anschlüsse vorhanden sein... und diese Anschlüsse wiederrum kannst du dann von der virt. Maschine auf die phys. Maschine "mappen"...

Bei der DOSBox fehlt mir die Möglichkeit, gewisse Einstellungen, die ich vornehmen muss, vorzunehmen. Ich muss die
Autoexec.bat um den Wert "SET CLIPPER=F99" erweitern, und in der msconfig Files auf 100 erhöhen. Gibt es dir
Möglichkeit in DOSBox? Ich habe dazu nichts finden können, und ohne diese Einstellungen gibt mir das Programm Fehler.

Ich hoffe auf weitere Antworten,
Gruß

Viel Erfolg face-smile
Member: TheRoyalty
TheRoyalty May 04, 2010 at 17:02:38 (UTC)
Goto Top
Nach Nachfrage hat sich herausgestellt, dass das alte DOS Programm auf einem Windows 98 Rechner lief. In Windows 98 wurde DOS ebenfalls emuliert, sehe ich das richtig?
Member: Kaltom
Kaltom May 04, 2010 at 18:52:12 (UTC)
Goto Top
Abend!

Jede DOS-Eingabeaufforderung ist "emuliert", egal unter welchem Windows.
Aber so wie ich das nun sehe, brauchst du auch genau so ein emuliertes DOS, da du ja die Autoexec.bat editieren musst...

Ich habe zwar mit solchen in Clipper geschriebenen Programmen noch nichts zu tun gehabt, aber wenn ich das recht mitbekommen habe, basiert dies auf dBase-Dateien, welche du ja auch z.B. in Access importieren könntest.

Ansonsten wäre vermutlich der XP-Mode von Windows 7 etwas für dich, vorausgesetzt du verwendest die Professional, Enterprise oder Ultimate Edition.
http://blog.tim-bormann.de/inoffizielle-anleitung-windows-7-xp-mode.htm ...

Viel Erfolg!
Member: Jochem
Jochem May 06, 2010 at 15:13:56 (UTC)
Goto Top
Moin,
bevor das hier in eine Emulationsorgie bzw. einen Virtualisierungsmarathon ausartet, mal wieder back to the roots face-wink.

Was macht denn das Programm bzw. was macht es nicht?
Stellt es einfach nur die Druckausgabe ein (angeforderte Drucke verschwinden im EDV-Nirwana) oder kommt anstelle von lesbarem Text nur Sonderzeichen-Müll?
Was für ein Drucker ist angeschlossen?
Gibt es das Programm evtl. noch im Quellcode (prg-Dateien), so daß man das neu compilieren könnte?
Um welche Clipper-Version handelt es sich?

Clipper stelt von sich aus Grundfunktionen bereit, die u.a. eine Druckausgabe ermöglichen. Mit entsprechenden Zusatzbibliotheken lassen sich auch hardwarenahe Funktionen einbinden, z. Bsp um direkt mit der LPT-Schnittstelle zu kommunizieren. Das ist aber a) nicht trivial und b) blähen zusätzliche Bibliotheken die endgültige EXE-Datei stark auf. Da Clipper eher auf der Semi-Professionellen Seite zu finden ist, gehe ich mal nicht davon aus, daß sich der Programmierer die Mühe gemacht hat, das Programm mit hardwarenahen Funktionen auszustatten. Insofern sollten also die Standardfunktionen für die Druckausgabe genutzt worden sein.

Wenn all das zu keinem Ergebnis führt, bleibt noch, wie bereits @Kaltom geschrieben hat, der weg, die dBase Datenbanken nach Access oder Excel zu importieren und die Auswertungen (Druckausgaben) über die dort zur Verfügung gestellten Berichte neu zu gestalten. Das ist evtl. sehr arbeitsaufwendig, aber wenn die Daten an ders nicht zu bekommen sind...


Gruß J face-smile chem
Member: TheRoyalty
TheRoyalty May 07, 2010 at 10:17:21 (UTC)
Goto Top
Hi Jochem,

Wie muss ich "Was macht das Programm" verstehen? Wenn ich den Druckbefehl gebe, springt es so ins Menü zurück, als wäre der Druckauftrag abgeschickt worden. Ich weiß von früher noch dass, wenn ein Drucker an dem LPT1 angeschlossen war und er zu dem Zeitpunkt der Druckauftragerteilung ausgeschaltet war, das Programm einen Fehler ausspuckte, á la "Drucker nicht bereit".

Der Drucker der angeschlossen ist ist ein Canon MP610 Multifunktionsdrucker. Ich weiß aber nicht, ob das wirklich wichtig ist, da ich ja aus der DOS Eingabeaufforderung drucken konnte.

Quellcode ist leider keiner vorhanden, das habe ich zuerst überprüft. Leider face-sad

Wie kann ich die Clipper-Version ermitteln?

Ich werde jetzt gleich mit den SysInternals mal schauen was passiert.

Danke für die weiteren Antworten.

EDIT: @sysinternals PortMon: Wenn ich es richtig verstehe überprüft PortMon die seriellen und parallelen Anschlüsse die in der Registry unter HKEY_LOCAL_MACHINE\Hardware\DeviceMap\SerialComm und HKEY_LOCAL_MACHINE\Hardware\DeviceMap\Parallel Ports definiert sind. Da ist in meinem Fall nur COM3 aufgeführt. Wenn ich aus dem DOS-Programm printe erscheint auch nix im Logfile. Muss ich das noch anpassen?
Member: Jochem
Jochem May 07, 2010 at 11:42:55 (UTC)
Goto Top
Moin,
jep, nach der Beschreibung "Wenn ich den Druckbefehl gebe, springt es so ins Menü zurück, als wäre der Druckauftrag abgeschickt worden" sieht es so aus, als ob das Programm "sauber" seinen Druckauftrag absolviert hat, der Drucker aber nichts mit den Druckdaten anfangen kann.

Wenn ich die technischen Daten von dem MP 610 richtig gelesen habe, verfügt der nur über einen USB-Anschluß und nicht über einen Parallel-Port. Wie ist der Drucker denn nun tatsächlich angeschlossen? Nach meinem Kenntnisstand brauchst Du für das Clipper-Programm einen Drucker mit echtem Parallel-Port. falls Du einen HP Laserjet III oder ähnliches Modell hast, häng den mal an den Rechner. Es wird vermutlich auch ein Laserdrucker funktionieren, der einen Laserjet per Emulation darstellen kann bzw. auf dessen Steuerzeichen eingestellt werden kann(Kyocera FS-1000, FS 1010, FS-1020D, 1030D und Artverwandte).

Dass Du problemlos aus der DOS-Box heraus drucken kannst, hat nur soweit Aussagekraft, als daß dadurch höchstens bestätigt wird, daß ein Drucker angeschlossen ist. In Deinem Beispiel wird ein Buchstabe "L" gedruckt. Du hast dem Drucker aber weder mitgeteilt, wo auf dem Blatt er dieses tun soll, in welcher Schriftart er diesen Buchstaben auf das Papier bringen soll oder in welcher Schriftbreite er den Buchstaben drucken soll. All das wird aber (vermutlich) in dem Clipper-Programm geschehen. Dazu werden sog. Steuersequenzen abgesetzt, die der angeschlossene Drucker dann als "Schriftart mit 10 Punkt" oder "Schriftart Courier" interpretiert und entsprechend umsetzt. Da es unterschiedliche Druckerhersteller gibt, sind für gleiche Funktionen evtl. andere Steuerzeichen notwendig. Wenn also ein IBM-Drucker mit Espson-Steuerzeichen gefüttert wird, ist das Ergebnis nicht immer das, was erwartet wird.

Die Clipper-Version sollte im Klartext in der EXE-File stehen.

Den Test mit den Sysinternal-Tools kannst Du Dir meiner Meinung nach schenken. Das Tool prüft die von einem Programm angesprochenen Ports ab. Wenn das Programm also Drucken will, wird der Druckerport angesprochen. Egal, ob dies programmintern durch Routinen initialisiert wird, die mit der Hardware direkt kommunizieren oder dazu die "eingebauten" Programmfunktionen nutzen.

Wenn Du die Möglichkeit hast, einen Drucker anzuschließen, der den empfangenen Datenstrom "dumpen" kann, also die Steuerzeichen und die Nutzdaten in darstellbarer Form zu Papier bringt, dann kannst Du das mal probieren. Dann sieht man evtl. schon mal, ob überhaupt was am Drucker ankommt oder ob die Daten schon vorher im Nirwana verschwinden.

Hat der MP 610 eine Sleep-Funktion (nach einer einstellbaren Zeit schaltet der Drucker ab, bleibt aber weiterhin Standby)? Dann lass ihn mal "schlafen" gehen und schick dann was auf den Drucker. Wenn der MP 610 jetzt aufwacht, kommt jedenfalls schon mal was am Drucker an. Ich tippe weiterhin darauf, daß der angeschlossene Drucker nichts mit den Druckdaten anfangen kann und daher die Arbeit nicht aufnimmt. Wie gesagt: Alte Software bedingt zumeist auch alte Hardware.

Gruß J face-smile chem
Member: TheRoyalty
TheRoyalty May 07, 2010 at 13:03:41 (UTC)
Goto Top
Danke schonmal wieder für die Antwort.

Mir ist klar, dass die Druckeinstellungen stimmen müssen, und ich hatte zu einem bestimmten Zeitpunkt als ich drucken wollte plötzlich eine Serie von eigenartigen Zeichen die sich über unterschiedlich viele Zeilen über jede Menge Seiten gestreckt haben, aber hab es als Einstellungs-Fehler auf meiner Seite abgetan, da ich in den Druckertreibern die Druckmodi ausprobiert habe.

Ich hatte es so verstanden, dass man heutige GDI-Drucker trotzdem verwenden kann, wenn der Druckprozessor auf Klartext gestellt wird. Liege ich da im Argen? Denn dann macht meine ganze Probiererei keinen Sinn.

Ich habe zwar nen alten HP Deskjet, aber der hat nur einen LPT Anschluss, und ich habe kein Modul, der das auf USB transformiert, falls es sowas gibt.

Mir würde es ja schon reichen, wenn ich die Druckaufträge erstmal in Dateien umleiten könnte, dann kann ich's zwar etwas mühsam aber immerhin überhaupt im Windows drucken.

EDIT: Achso, der Canon ist über USB angeschlossen.

EDIT2: Ich werde vermutlich also doch die Drucker-Einstellungen im Programm verändern müssen, wenn ich dich, Jochem, richtig verstehe. Einen Screenshot der Einstellungen habe ich mal hochgeladen:
http://img203.imageshack.us/img203/5234/unbenanntns.png

Kannst du dir daraus einen Reim machen?

EDIT3: Ich stehe kurz davor die 70€ auszugeben und Wolf IT-Service eine Chance zu geben, da die wohl über Datei-Druck und dann Konvertierung in GDI-Konforme Druckaufträge Erfolge haben. Wobei ich zweifele, ob es wirklich hilft.

Hoffe auf weitere Antworten,
Gruß
Member: Jochem
Jochem May 07, 2010 at 14:29:35 (UTC)
Goto Top
Moin,
Jep, Dein erster "Test" (viele "komische" Zeichen über mehrere Zeilen und Seiten verteilt) deutet genau darauf hin, daß der Drucker mit den falschen Steuerzeichen beschickt wurde. Insoweit sollte dann auch die die Einstellung im Druckprozessor von Windows OK gehen. Demnach kann auch davon ausgegangen werden, daß am Drucker "etwas" ankommt. Sieht also bis hierher schon mal nicht schlecht aus.

Ich gehe weiterhin jetzt mal davon aus, daß Dein Rechner nicht mehr über einen Paralle-Port verfügt, da Du über einen Adapter Parallel-zu-USB nachdenkst.

Zur Umleitung von Druckausgaben aus der DOS-Box habe ich mal das hier gefunden. Ist eine Try-before-Buy Version, 30 Tage frei nutzbar. Das sollte für einen Test ausreichend sein.

Der Screenshot sieht schon recht vielversprechend aus. Ich würde das so interpretieren: Über die Auswahlbox kann der angeschlossene Drucker ausgewählt werden. Wie ich weiter oben schon geschrieben habe, gibt es für bestimmte Funktionen je Drucker unterschiedliche Steuersequenzen. Je nachdem, wie der Programmierer das jetzt gelöst hat, kann man nun entweder nur die Druckfunktionen auswählen und die zugehörigen Steuersequenzen sind fest im Programm hinterlegt. Oder nach der Anwahl der Druckfunktion kann man die zugehörigen Steuersequenzen manuell eintragen und die werden im Programm gespeichert. Was nun Fakt ist, gibt der Screenshot leider nicht her.face-sad.

Wenn Du noch weist, welcher Drucker da eingestellt war, wäre es sinnvoll, diese Einstellung noch einmal wiedereinzustellen.

Ob der Canon-Drucker aus der Anwendung kompatibel mit dem eingesetzten MP610 ist, wage ich zu bezweifeln.

Welche Drucker sind denn sonst noch gelistet in dem Programm?
Und wie sind die Steuersequenzen hinterlegt, fest im Programm oder frei zur Eingabe?

Wenn Du also die Druckausgabe in eine Datei umleiten würdest, könnte man mal in die Datei reinschauen und sich die Steuersequenzen ansehen. Evtl. ergibt sich daraus schon eine Aussage, welcher Druckertyp eingestellt werden soll.
BTW: Hast Du noch Ausdrucke, die auf dem alten Rechner erstellt wurden? Damit man vergleichen kann, wo es noch klemmt.

Gruß J face-smile chem
Member: TheRoyalty
TheRoyalty May 07, 2010 at 15:40:41 (UTC)
Goto Top
Ich bin jetzt den einfachen weg gegangen, und habe mir Hilfe mit dem Programm DOSPRN geholt. Was auch funktioniert, mir aber Bauchschmerzen bereitet, weil ich keine ordentliche Lösung gefunden habe.

Wie dem auch sei druckt es jetzt. Ich kann als Lösung nur auf DOSPRN verweisen, was ich ungern tue, da es kostet.

Trotzdem danke für die ausführliche Hilfe an alle, besonders Jochem.