Hallo,
ich versuche schon seit geraumer Zeit herauszufinden was nicht funktioniert.
Ich versuche mit folgendem Code einen Befehl über PSEXEC.exe an pnputil zu schicken.
Das funktioniert wohl auch, meine Anwendung schmeißt mir keine Exception. Das Konsolenfenster geht auf, aber dann passiert nix weiter.
Wenn ich den Befehl in der CMD manuell eingebe, funktioniert es so wie es soll.
Übersehe ich was?
Wäre für jeden Tipp dankbar. 😃
Hier mein Code:
if (txt_pcnummer.Text != "")
{
try
{
Process proc = new Process();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.FileName = Path.GetTempPath() + @"\PsExec.exe";
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.Arguments = @" /accepteula \\" + txt_pcnummer.Text + @" -u DOMAIN\USER -p PASSWORD c:\windows\system32\pnputil.exe -e > c:\printDriver.txt";
proc.Start();
err = proc.StandardError.ReadToEnd();
proc.WaitForExit();
proc.Close();
}
catch (Exception ex) { MessageBox.Show(ex.Message + "\n\n" + err, "Error", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); }
finally { if (err != "") MessageBox.Show("Fehler: \n\n" + err); }
}
Gruß trekki
ProcessStartInfo.WorkingDirectory-Eigenschaft wirste wahrscheinlich dafür setzen müssen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo vielen Dank für deine Antwort Abt.
Ich habe es inzwischen anders lösen können. Ganz ohne ein Programm zu schreiben.
Anforderung: Veralteter Druckertreiber auf Windows 7 PC. Entfernen und neu hinzufügen des Netzwerkdruckers führt leider nicht zur Aktualisierung des Treibers. Alte Version wird weiterhin genutzt. Mit dem Script kopiere ich den neuen Treiber auf den PC, installiere einen lokalen Testdrucker mit dem neuen Treiber und lösche diesen wieder (dadurch wird die Aktualisierung des Treibers erzwungen). Netzwerkdrucker wieder installieren, alles schick 😃
Wen es interessiert hier das Script (muss natürlich auf die eigene Umgebung angepasst werden).
Benötigt wird im selben Verzeichnis noch die PSEXEC.exe
BAT-File 1 für den Aufruf der ganzen Aktion (start_repair.cmd):
@echo off
cls
echo Bitte Computernamen oder IP Adresse eingeben:
set /p Computer=
copy repair.cmd \\%Computer%\C$
psexec.exe -u DOMAIN\USER -p PASSWORD \\%Computer% C:\repair.cmd
BAT-File 2 für die eigentliche "Reparatur" (repair.cmd):
@echo off
echo DRUCKERREPARATUR IM GANGE. BITTE NICHT UNTERBRECHEN!!!
echo Drucker DRUCKERNAME entfernen...
rundll32 printui.dll,PrintUIEntry /q /dn /n \\SERVER\DRUCKERFREIGABENAME
net stop spooler
pnputil -i -a "PFAD_ZUR_INF-DATEI"
net start spooler
rundll32 printui.dll,PrintUIEntry /if /b "Test_Printer" /f "PFAD_ZUR_INF-DATEI" /r "LPT1:" /m "DRUCKERMODELL_AUS_DER_INF_DATEI"
rundll32 printui.dll,PrintUIEntry /q /dl /n Test_Printer
echo Drucker DRUCKERNAME werden installiert...
rundll32 printui.dll,PrintUIEntry /q /in /n \\SERVER\DRUCKERFREIGABENAME
rundll32 printui.dll,PrintUIEntry /q /y /n \\SERVER\DRUCKERFREIGABENAME
Eventuell hilft dies dem einen oder anderen weiter.
Gruß trekki