Laden...

[erledigt] psshutdown per Process.Start ausführen

Erstellt von varron vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.369 Views
V
varron Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren
[erledigt] psshutdown per Process.Start ausführen

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

U
189 Beiträge seit 2011
vor 10 Jahren

Wird denn das EULA-Fenster angezeigt oder irgendeine Fehlermeldung geworfen?

16.841 Beiträge seit 2008
vor 10 Jahren

Vermute das Standardproblem, wenn man einen Process startet (und dann noch unter einem andren Konto): WorkingDirectory wird nirgends gesetzt.

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo varron,

oder etwas allgemeiner betrachtet: [FAQ] Programm läuft in anderer Umgebung nicht (richtig).

herbivore

R
60 Beiträge seit 2006
vor 10 Jahren

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

V
varron Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

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

R
60 Beiträge seit 2006
vor 10 Jahren

Hallo varron

warum start3est du eigentlich psshutdown nicht direkt?

Gruss Roger

4.221 Beiträge seit 2005
vor 10 Jahren

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo varron,

es öffnet sich kurz ein DOS-Fenster, dieses schließt sofort wieder

verwende /k, um die Fehlermeldung lesen zu können.

herbivore

V
varron Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

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.

Hinweis von gfoidl vor 10 Jahren

Threads werden normalerweise nur geschlossen, wenn sie gegen die Regeln verstoßen, aber ich habe den Thread als [erledigt] gekennzeichnet.