Im Büro meines Vaters stand nach längerer Zeit mal wieder eine Aufrüstung des Computers an. Arbeitsspeicher zu klein, Festplatte zu klein, Prozessor zu langsam – da lohnte sich dann doch die Anschaffung eines neuen Computers. Und dieser hatte Windows 7.
Windows 7 ist in meinen Augen ein ordentliches Betriebssystem, allerdings hat die 64bit-Version einen kleinen Haken: die Unterstützung für 16bit-Software wurde entfernt. Das bedeutet das Aus für Programme aus der DOS- und Windows 3.1-Ära. Microsoft hat sich für dieses Problem eine Lösung einfallen lassen: Den XP-Modus. Die Programme laufen dabei in einer virtuellen Maschine mit Windows XP, lassen sich aber ganz normal über das Startmenü starten. Beim Benutzen bekommt man daher (bis auf die etwas längere Startzeit) kaum mit, dass ein Programm in einer virtuellen Maschine läuft.
Im Detail hat der XP-Modus aber so seine Tücken. Die Drucker werden über virtuellen Anschlüsse (TS001, TS002...) zur Verfügung gestellt. Ein DOS-Programm kann jedoch nur auf LPT-Anschlüssen drucken. Zwar wird einem im XP-Modus durchaus ein LPT1-Anschluss angezeigt – doch wie der benutzt werden soll bleibt unklar. Nach verschiedenen Foreneinträgen im Internet gab es wohl mal eine Version von Windows Virtual PC (die Virtualisierungssoftware, die für den XP-Modus verwendet wird), mit der man den LPT-Port des Host-Computers in die virtuelle Maschine durchschleifen kann. Die Version, die mit dem XP-Modus zum Einsatz kommt, kann das jedoch nicht. Übrig geblieben ist ein LPT1-Anschluss, der nirgendwo hinführt.
Im Internet bin ich auf folgende Lösung gestoßen: Man aktiviert für den betreffenden Drucker den Druckerpool und weist ihm neben dem virtuellen Anschluss auch noch den LPT1-Anschluss zu.
Der Druckerpool funktioniert folgendermaßen: Mehrere Drucker vom gleichen Typ haben zusammen eine Warteschlange. Sobald einer der Drucker frei wird, bekommt er den nächsten Druckauftrag aus der Warteschlange zugeteilt. Der Trick ist nun: Wenn das DOS-Programm einen Druckauftrag an LPT1 sendet, wird der von Windows erst mal in die zuständige Warteschlange eingereiht. Und weil am LPT1-Anschluss kein Drucker hängt, der den Auftrag verarbeiten könnte, geht der Auftrag über den anderen Anschluss des Druckerpools raus.
Soweit die Theorie. Denn irgendwas hängt wohl doch an diesem LPT1-Anschluss. Der erste Druckauftrag in der Warteschlange findet noch seinen Weg zum Drucker, doch während der dann druckt, verschwinden die restlichen Druckaufträge über LPT1 ins Nirvana. Der Trick mit dem Druckerpool mag funktionieren, wenn man einen echten freien LPT-Anschluss hat, im XP-Modus klappt es jedoch nicht.
Schließlich habe ich noch eine andere Lösung gefunden: Man erstellt im XP-Modus für den Drucker eine Freigabe und führt dann in der Eingabeaufforderung diesen Befehl aus:
net use lpt2: \\<Computername>\<Freigabename>
Damit klappte es dann. Nur ein Problem gibt es noch: Der XP-Modus vergisst die Bindung für LPT2 ständig wieder. Auch der Parameter /persistent:yes
ändert daran nichts. Die naheliegenste Lösung wäre eine Batch-Datei, die erst den net use-Befehl absetzt und dann das DOS-Programm startet. Doch das klappt auch nicht, denn wenn man ein Programm im XP-Mode startet, dauert es noch etwa 30 Sekunden, bis alle Drucker verfügbar sind. Also hier die etwas kompliziertere Variante, die schon mal das Programm startet und nebenher versucht, den Drucker so schnell wie möglich unter LPT2 bereit zu stellen:
@echo off
REM drucker.bat minimiert starten, nicht auf Beenden warten
start /min drucker.bat
REM Programm starten
program.exe
@echo off
sleep 5
net use lpt2: \\virtualxp\epson
sleep 5
net use lpt2: \\virtualxp\epson
sleep 5
net use lpt2: \\virtualxp\epson
sleep 5
net use lpt2: \\virtualxp\epson
sleep 5
net use lpt2: \\virtualxp\epson
sleep 5
net use lpt2: \\virtualxp\epson
REM Fenster schließt sich nicht von selbst,
REM wenn diese Datei per start gestartet wird
exit
veröffentlicht am 22.07.13 um 18:04 Uhr
Tags: Windows, Computer
Es sind keine Kommentare vorhanden.