C# Adminrechte dynamisch anfordern

Nick_SMI

Ensign
Registriert
Sep. 2015
Beiträge
153
Hallo zusammen!

Ich möchte folgenden Code ausführen:

Code:
            try
            {
                string SpeicherOrt = AppDomain.CurrentDomain.BaseDirectory + "Ex.xlsx";
                System.Windows.MessageBox.Show(SpeicherOrt);
                if (System.IO.File.Exists(SpeicherOrt))
                {
                    string remoteUri = "http://www.myweb.de/updates/Ex.xlsx";
                    WebClient myWebClient = new WebClient();
                    myWebClient.DownloadFile(remoteUri, SpeicherOrt);
                    System.Windows.MessageBox.Show("Update erfolgreich abgeschlossen!", "Programm aktualisiert!", MessageBoxButton.OK, MessageBoxImage.Information);
                }
                else
                {
                    System.Windows.MessageBox.Show("Das Programm konnte nicht gefunden werden!", "Fehler!", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show(Convert.ToString(ex) + Environment.NewLine + Environment.NewLine + "Bitte melden Sie den Fehler!", "Fehler!", MessageBoxButton.OK, MessageBoxImage.Error);
            }

Das Problem daran ist, dass das Programm unter Programme installiert ist.
Ich möchte aber nicht, wie ich es momentan nur weiß, dass ich es über die Mani mach, sondern "dynamisch" erscheint, dass heißt, dass bsp. bei Form_Loaded erst die Frage erscheint, ich die Berechtigung kriege und dann mein Code folgt....

Grüße und danke im Voraus!
 
Also die Elevation ist prozessbasierend. D.h. entweder du startest dein Programm nochmal (bspw. mit einem Parameter) mittels des runas-Commandos: https://support.microsoft.com/en-us/kb/981778 oder du machst so Tricks wie ein Out-Of-Process COM-Objekt. Aber ich denke, mit dem sich selbst nochmal Starten fährst du ganz gut.

Warum du nicht dein aktuellen Prozess elevaten kannst: Race Condition: Ich könnte deinen Prozess hijacken (gleiche Priviliegierungsebene) und dann deinen Prozess elevaten, dann sieht es so aus, als wäre es dein Prozess, aber mir gehört er längst. (Ich ist in diesem Fall ein anderes Programm ohne Elevation.)
 
Was ist denn so schlecht an der Manifest-Methode?

Erhöhung der Berechtigung zur Prozesslaufzeit scheint nicht möglich zu sein, das hat zumindest meine 5-Sekunden-Googlesuche ergeben.
 
Warum überhaupt im Programverzeichnis schreiben, solche sich ändern Daten würde ich eher in %appdata%/ProgramName speichern:

Code:
string updatesPath = Environment.GetEnvironmentVariable("APPDATA") + "/" +
                     Assembly.GetExecutingAssembly().GetName().Name;
 
Zurück
Oben