tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Shakie
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
1661
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Pablorama Pablorama ist offline Mitglied Bronze
    Registriert seit
    Dec 2009
    Beiträge
    25
    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 :
    1
    
    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 :
    1
    
    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 :
    1
    2
    3
    4
    5
    
                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
     

  2. #2
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Du kannst einfach direkt cscript starten:
    Code csharp:
    1
    
    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");
     
    hihi = -h²

  3. #3
    Pablorama Pablorama ist offline Mitglied Bronze
    Registriert seit
    Dec 2009
    Beiträge
    25
    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 :
    1
    
    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
     

  4. #4
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Was macht denn diese prnport.vbs-Datei? Sind die Parameter danach für das VB-Script oder für cscript?
     
    hihi = -h²

  5. #5
    Pablorama Pablorama ist offline Mitglied Bronze
    Registriert seit
    Dec 2009
    Beiträge
    25
    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
     

  6. #6
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    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:
    Code csharp:
    1
    
    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
    Pablorama bedankt sich. 
    hihi = -h²

  7. #7
    Pablorama Pablorama ist offline Mitglied Bronze
    Registriert seit
    Dec 2009
    Beiträge
    25
    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 :
    1
    2
    
    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 :
    1
    
    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");
    Geändert von Pablorama (02.03.10 um 13:27 Uhr)
     

Ähnliche Themen

  1. C# - Druckerport/Parallelport ansteuern
    Von Alexander12 im Forum .NET Café
    Antworten: 2
    Letzter Beitrag: 01.09.11, 17:16
  2. Drucker mit Script anlegen
    Von hugo25m im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 21.11.08, 10:55
  3. usb drucker
    Von mostly_harmless im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 10.11.08, 21:20
  4. Druckerport auslesen
    Von schinni im Forum Java
    Antworten: 0
    Letzter Beitrag: 21.09.07, 13:36
  5. A3+ Drucker
    Von Canon im Forum Fotografie & Digitalfotografie
    Antworten: 1
    Letzter Beitrag: 17.12.03, 18:26