Drucker und Druckerport anlegen (C#)

Pablorama

Mitglied
Hallo Leute,

ich schreibe gerade ein (Teil-)Programm, was mir einen Druckerport anlegt, und danach einen Drucker installiert.
Meine Versuche waren soweit auch erfolgreich, aber bisher ohne C#. Ich habe den folgenden Code mit der CMD ausgeführt, und hatte danach den gewünschten Port.
Code:
cscript %WINDIR%\windows\system32\Printing_Admin_Scripts\de-DE\prnport.vbs -a -r "IP_10.0.0.2:" -h "10.0.0.1" -o raw -n 9101"



Danach kann ich mit dem folgendem Code einen Drucker dafür anlegen.
Code:
rundll32 printui.dll,PrintUIEntry /if /f c:Windows\inf\ntprint.inf /r IP_10.0.0.2: /m 'HP LaserJet 4 Plus' /b 'Testdrucker1234' /z



Das ganze würde ich jetzt nur gerne aus meinem Programm aus ausführen, mein erster Gedanke war, das ich die Cmd.exe als Prozess starte, und ihr als Argument die beiden Codebeispiele übergebe.

Dann einzige was aber passiert ist, dass die Cmd.exe aufgeht. Danach passiert nichts mehr.
Mein Code sieht in etwas so aus:

Code:
            ProcessStartInfo StartCMD = new ProcessStartInfo("cmd.exe");
            StartCMD.CreateNoWindow = true;
            string prnarg = "cscript %WINDIR%\\windows\\system32\\Printing_Admin_Scripts\\de-DE\\prnport.vbs -a -r \"IP_10.0.0.2:\" -h \"10.0.0.1\" -o raw -n 9101";
            StartCMD.Arguments = prnarg;
            Process.Start(StartCMD.FileName, StartCMD.Arguments);

Habt ihr eine Idee, was ich falsch mache? Bzw. wie ich es richtig machen kann, mir fehlt im mom irgendwie der Ansatz...

Danke im voraus und MfG
Pablo ;)
 
Du kannst einfach direkt cscript starten:
C#:
System.Diagnostics.Process.Start("cscript","%WINDIR%\\windows\\system32\\Printing_Admin_Scripts\\de-DE\\prnport.vbs -a -r \"IP_10.0.0.2:\" -h \"10.0.0.1\" -o raw -n 9101");
 
Hallo Shakie,

danke erstmal für den Hinweis. Aber leider klappt es nicht. ich bekomme zwar keinen Fehler, aber leider auch keinen Port.
Die Console geht ganz kurz auf und schließt sich wieder, so dass ich nicht sehen kann ob es eine Antwort gibt.
Auch mit der Funktion WaitForExit() verschwindet die Console sofort.

Der ExitCode des Processes ist 1.
Wenn ich es richtig verstanden habe, dann heißt das ja, das der Prozess nicht erfolgreich war, sonst müsste dort eine 0 stehen.
Hast du, oder jemand anderes, vielleicht eine Erklärung dafür?
Ich habe jetzt schon verschiedene Versionen mit und ohne Anführungszeichen versucht, auch mal ein @ davor und die doppelten Backslashes entfernt, aber ich bekomme es nicht hin, dass der Port angelegt wird.


Code:
System.Diagnostics.Process.Start("cscript", "%WINDIR%\\system32\\Printing_Admin_Scripts\\de-DE\\prnport.vbs -a -r \"IP_10.0.0.4\" -h \"10.0.0.4\" -o raw -n 9105");

Danke nochmal und MfG
Pablo ;)
 
Was macht denn diese prnport.vbs-Datei? Sind die Parameter danach für das VB-Script oder für cscript?
 
Hallo,

Sorry das es so lange gedauert hat.

Die Parameter sind für das VB Script.
Technet - Prnport.vbs

Mit diesem Befehl werden Standard-TCP/IP-Druckerports erstellt, gelöscht und aufgelistet. Außerdem kann die Portkonfiguration angezeigt und geändert werden.

Das Cscript wird scheinbar gebraucht, um das VBscript aufzurufen.

Ist es vielleicht der falsche Weg den ich geh, über die Commandline?
Weiß jemand was ich falsch mache, oder hat jemand einen anderen Lösungsansatz?

Danke &MfG
Pablo ;)
 
Die Konsole brauchst du nicht, du kannst alles, was du in der Konsole startest, auch direkt starten. Eigentlich dürfte zum Starten des VB-Scripts schon folgendes ausreichen:
C#:
System.Diagnostics.Process.Start("%WINDIR%\\system32\\Printing_Admin_Scripts\\de-DE\\prnport.vbs", "-a -r \"IP_10.0.0.4\" -h \"10.0.0.4\" -o raw -n 9105");
Windows entscheidet dann, mit welchem Programm die vbs-Datei ausgeführt wird. Das ist das selbe Programm welches gestartet wird wenn du einen Doppelklick auf die Datei machst.

Wenn gar nichts funktioniert dann erstelle doch einfach eine Batch-Datei, füge die zwei Zeilen aus deinem ersten Post rein und starte die Batch-Datei über Process.Start
 
Hi nochmal,

dass mit der Batch habe ich vorübergehend schonmal gemacht. ;)

Habe es eben mal ohne CScript getestet, also das CScript ist notwendig, um das VBScript auszuführen. Wenn ich es nicht eingeben würde, dann müsste ich es als Standart für .vbs festlegen, was ich aber nicht machen darf, weil das Tool auf fremden Rechnern ausgeführt werden wird.

Deine Tipps haben mich auf den richtigen Weg gebracht. Dafür nochmal ein dickes Danke!

Das Problem lag beim "%WINDIR%. Ich habe es jetzt durch Environment.GetFolderPath(Environment.SpecialFolder.System); ersetzt und schon funktioniert es. Ist mir aber erst gekommen, als du gemeint hast das ich die Konsole dafür nicht brauche.
Hier ist der Code:

Code:
String systemFolder = Environment.GetFolderPath(Environment.SpecialFolder.System);
Process p = System.Diagnostics.Process.Start("Cscript", systemFolder + "\\Printing_Admin_Scripts\\de-DE\\prnport.vbs -a -r IP_10.0.0.4: -h 10.0.0.4 -o raw -n 9105");

Danke und MfG
Pablo ;)


EDIT: Die andere Zeile (um den Drucker zu installieren) sieht so aus:
Code:
p = System.Diagnostics.Process.Start("rundll32", "printui.dll,PrintUIEntry /if /f c:\\Windows\\inf\\ntprint.inf /r IP_10.0.0.4: /m \"HP LaserJet 4 Plus\" /b Testdrucker1 /z");
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück