Hallo,
ich habe ein kleines Problem, ich möchte über einen Button ein psshutdown auf einem Remoterechner ausführen, über eine DOS-Box kein Problem aber mit c# klappt es einfach nicht.
hier eine vereinfachte Darstellung, später soll Benutzername, Passwort und IP über eine TextBox variabel sein.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace Form_und_psshutdown
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
StringBuilder sbArguments = new StringBuilder();
Process pr = new Process();
ProcessStartInfo prs = new ProcessStartInfo();
prs.FileName = @"c:\Windows\System32\cmd.exe";
prs.Arguments = (@"psshutdown -u Administrator -p Passwort \\10.10.10.200 -r");
prs.RedirectStandardOutput = true;
prs.UseShellExecute = false;
pr.StartInfo = prs;
pr.Start();
pr.WaitForExit();
}
}
}
Gruß,
Varron
Wird denn das EULA-Fenster angezeigt oder irgendeine Fehlermeldung geworfen?
Vermute das Standardproblem, wenn man einen Process startet (und dann noch unter einem andren Konto): WorkingDirectory wird nirgends gesetzt.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo varron,
oder etwas allgemeiner betrachtet: [FAQ] Programm läuft in anderer Umgebung nicht (richtig).
herbivore
Hallo varron
So viel ich weiss, musst du, wenn du über cmd.exe gehst ein /c voranstellen, damit das Kommando ausgeführt wird.
Also einfach ein /c vor psshutdown.
Gruss Roger
Hi,
danke für die Antworten aber leider ohne erfolg.
@UZI:
Keine Fehler, Meldung oder ähnliches - es öffnet sich kurz ein DOS-Fenster, dieses schließt sofort wieder und das war es auch schon.
@Abt:
Soweit ich weiß wird wenn kein Directory gesetzt ist das Standard Verzeichnis "%SYSTEMROOT%\system32" gezogen - hier liegen auch die PSEXEC & PSSHUTDOWN Dateien.
@herbivore:
.Net ist installiert und auch als Referenz dem Projekt hinzugefügt.
@RogerST:
Hab es gerade versucht - kein Erfolg 😦
Echt zum Verzweifeln...muss aber irgendwas am Aufruf von psshutdown sein.
Wenn ich einfach nur den Prozess cmd starte macht er es ohne Probleme.
Gtuß,
Varron
Hallo varron
warum start3est du eigentlich psshutdown nicht direkt?
Gruss Roger
Wieso nicht direkt ?
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Hallo varron,
es öffnet sich kurz ein DOS-Fenster, dieses schließt sofort wieder
verwende /k, um die Fehlermeldung lesen zu können.
herbivore
So hat es jetzt funktioniert 😃
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace Form_und_psshutdown
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
StringBuilder sbArguments = new StringBuilder();
Process pr = new Process();
ProcessStartInfo prs = new ProcessStartInfo();
prs.FileName = @"c:\Windows\System32\psshutdown.exe";
prs.Arguments = (@"-u Administrator -p Passwort \\10.10.10.200 -r");
prs.RedirectStandardOutput = true;
prs.UseShellExecute = false;
prs.CreateNoWindow = true;
pr.StartInfo = prs;
pr.Start();
pr.WaitForExit();
}
}
}
Thema kann geschlossen werden.
Danke an alle die mir geholfen haben.
Threads werden normalerweise nur geschlossen, wenn sie gegen die Regeln verstoßen, aber ich habe den Thread als [erledigt] gekennzeichnet.