Laden...

[erledigt] Exe mit Klasse Process starten als Admin mit UseShellExecute=false + RedirectOutputs

Erstellt von sharpType vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.555 Views
S
sharpType Themenstarter:in
228 Beiträge seit 2009
vor 12 Jahren
[erledigt] Exe mit Klasse Process starten als Admin mit UseShellExecute=false + RedirectOutputs

Hi Profis,

ich habe folgendes Problem und kriege es einfach nicht hin:

Ich möchte ein Prozess mit Parametern als Admin starten (Windows 7) und parse den Output, den ich an die Konsole weiterleite. Daher ist:


System.Diagnostics.Process startServiceProcess = new System.Diagnostics.Process();

                            startServiceProcess.EnableRaisingEvents = true;
                            startServiceProcess.StartInfo.UseShellExecute = false;
                            startServiceProcess.StartInfo.CreateNoWindow = true;
                            startServiceProcess.StartInfo.RedirectStandardError = true;
                            startServiceProcess.StartInfo.RedirectStandardOutput = true;

Jetzt habe ich:


                            if (System.Environment.OSVersion.Version.Major >= 6)  // Windows Vista or higher
                            {
                                startServiceProcess.StartInfo.Verb = "runas";
                            }
                            else
                            {
                                // No need to prompt to run as admin
                            }

dahinter eingefügt. Anschließen den Process gestartet. Das Funktioniert nur, wenn


UseShellExecute = true

ist. Dann habe ich aber das Problem, dass ich den Output nicht parsen kann, was wichtig ist. Und wenn ich UseShellExecute = false setze und den Username, Domäne und PW in den Code direkt eingebe funktioniert es, jedoch habe ich dann das "WindowsBehaviour" nicht, d.h. Automatische Eingabe - falls erforderlich - von User + PW des Adminkontos.

Wie kann ich den Output parsen d.h. UseShellExecute = false und gleichzeitig die Windows-Adminabfrage (UAC) verwenden? 🤔

Das Ärgert mich wirklich. Ich möchte mir jetzt eigentlich keinen Dialog basteln und nach dem PW verlangen sondern das - wie eigentlich gedacht - Windows selbst überlassen.

Hoffe mir kann da jmd helfen, bin echt am verzeifeln. 🙁

Bin dankbar für jeden Hinweis...

G
538 Beiträge seit 2008
vor 12 Jahren

Ich glaube das geht nicht, und der Antwortende in diesem Thread glaubt das ebenfalls nicht: Stackoverflow - Get error and standard output from an elevated child process

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

S
sharpType Themenstarter:in
228 Beiträge seit 2009
vor 12 Jahren

Ok für alle die, die auf diesen Thread durch eine Suche gestoßen sind und sich ebenfalls über die Leute aufregen die dann nur schreiben: closed, weil gelöst 🙄 8o

Folgendes hat mir weitergeholfen:

Ich habe (in Visual Studio 2010 Pro) ein neues Element hinzugefügt ==> Anwendungsmanifestdatei und dort


<requestedExecutionLevel  level="asInvoker" uiAccess="false" />

durch


<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

ersetzt. Die Vorlagen sind dort schon alle vorhanden, man muss sich praktisch nur "einkommentieren". Das löst das Problem in sofern, dass beim Start der kompletten Applikation die UAC auftaucht und nach dem Admin fragt und anschließend die gesamte App als Admin läuft. Dadurch kann ich auch wieder den Output umleiten ohne das die Fehlermeldung kommt, dass useshellexecute=true sein muss.

PS: Es funktioniert scheinbar nicht (zumindest bei mir nicht), die App ohne Adminmanifest - also ganz normal wie vorher - über Windows dann mit einem Rechtklick auf die EXE und "Als Administrator ausführen" zu starten.

Also alles bestens 😁

Dankeschöööön.

Grüße