Hallo,
ich habe ein Problem (welche Überraschung
):
Sobald man den Benutzerkontext ändert, in welchem eine Anwendung ausgeführt werden soll, lässt sich der Out- und Input nicht mehr umleiten sowie ein Fenster nicht mehr als „nicht anzeigen“ ausführen.
Ich erkläre es am Code (ist vielleicht verständlicher). Es werden alle benötigten Parameter werden in einem Objekt übergeben.
So ausgeführt, funktioniert alles. Mit dem Nachteil, dass sich bspw. netsh in den Vordergrund drängt und ein Fenster offen hält während die Ports für meine Anwendung geöffnet werden.
Das Problem bei der Sache ist nun, dass sobald der Benutzerkontext übergeben wird (also nicht der normale PC-Benutzer in dessen Kontext die Anwendung gestartet wird und welche über keinerlei administratorischen Berechtigungen verfügt), ist es nicht mehr möglich folgende Befehle auszuführen:
Meine Hoffnung war nun, den OutPut umleiten zu können. Doch auch diese Funktion steht augenscheinlich nur dann zur Verfügung, wenn keine Benutzerdaten übergeben werden. In folgendem Code-Beispiel funktioniert es:
Man beachte bitte, dass hier der Benutzername, sein Passwort und die Domäne auskommentiert sind. Sobald man diese einkommentiert bekommt man folgende Fehlermeldung:
Und die sicherlich unlängst erwartete Frage lautet:
Wie kann ich den OutPut so umleiten, dass er auch dann umgeleitet wird, wenn ich den Prozess in einem anderen Benutzerkontext ausführe?
Verwendete Software:
Visual Studio 2005 Pro
.Net 2.0 (3.5 ist installiert)
Windows XP Pro
Verwendete Hardware:
HP dx6100 MT (Arbeitsspeichererweiterung auf 4 GiB)
ich habe ein Problem (welche Überraschung

Sobald man den Benutzerkontext ändert, in welchem eine Anwendung ausgeführt werden soll, lässt sich der Out- und Input nicht mehr umleiten sowie ein Fenster nicht mehr als „nicht anzeigen“ ausführen.
Ich erkläre es am Code (ist vielleicht verständlicher). Es werden alle benötigten Parameter werden in einem Objekt übergeben.
Code:
private void ProzessAusfuehren(object[] Anweisungen)
{
lock (this)
{
p = new Process(); // neuen Prozess erstellen
p.StartInfo.FileName = Anweisungen[0].ToString(); // Anwendung
p.StartInfo.Arguments = Anweisungen[1].ToString(); // Parameter
if (Anweisungen.GetLength(0) > 2)
{
p.StartInfo.UserName = (string)Anweisungen[2]; // Benutzernamen
p.StartInfo.Password = (System.Security.SecureString)Anweisungen[3]; // Passwort
p.StartInfo.Domain = "geändert ;)"; // Domäne
p.StartInfo.UseShellExecute = false;
if (Anweisungen.GetLength(0) == 5) // Arbeitsverzeichnis zuweisen
p.StartInfo.WorkingDirectory = Anweisungen[4].ToString();
else
p.StartInfo.WorkingDirectory = @"C:\";
}
p.Start(); // Prozess starten
}
}
Das Problem bei der Sache ist nun, dass sobald der Benutzerkontext übergeben wird (also nicht der normale PC-Benutzer in dessen Kontext die Anwendung gestartet wird und welche über keinerlei administratorischen Berechtigungen verfügt), ist es nicht mehr möglich folgende Befehle auszuführen:
Code:
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
Meine Hoffnung war nun, den OutPut umleiten zu können. Doch auch diese Funktion steht augenscheinlich nur dann zur Verfügung, wenn keine Benutzerdaten übergeben werden. In folgendem Code-Beispiel funktioniert es:
Code:
private void ProzessAusfuehren(object[] Anweisungen)
{
lock (this)
{
p = new Process(); // neuen Prozess erstellen
p.StartInfo.FileName = Anweisungen[0].ToString(); // Anwendung
p.StartInfo.Arguments = Anweisungen[1].ToString(); // Parameter
if (Anweisungen.GetLength(0) > 2)
{
//p.StartInfo.UserName = (string)Anweisungen[2]; // Benutzernamen
//p.StartInfo.Password = (System.Security.SecureString)Anweisungen[3]; // Passwort
//p.StartInfo.Domain = "geändert ;)"; // Domäne
p.StartInfo.UseShellExecute = false;
if (Anweisungen.GetLength(0) == 5) // Arbeitsverzeichnis zuweisen
p.StartInfo.WorkingDirectory = Anweisungen[4].ToString();
else
p.StartInfo.WorkingDirectory = @"C:\";
//------------------------------\\
p.StartInfo.ErrorDialog = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
///----------------------------\\\
}
p.Start(); // Prozess starten
//------------------------------\\
StreamReader SR = p.StandardOutput;
string strOutput = SR.ReadToEnd();
SR.Close();
///----------------------------\\\
}
}

Und die sicherlich unlängst erwartete Frage lautet:
Wie kann ich den OutPut so umleiten, dass er auch dann umgeleitet wird, wenn ich den Prozess in einem anderen Benutzerkontext ausführe?
Verwendete Software:
Visual Studio 2005 Pro
.Net 2.0 (3.5 ist installiert)
Windows XP Pro
Verwendete Hardware:
HP dx6100 MT (Arbeitsspeichererweiterung auf 4 GiB)
Zuletzt bearbeitet: