Code mit erhöhten Rechten ausführen

10/02/2010 - 12:56 von Marcel Beutner | Report spam
Hallo zusammen,

ich bin seit ein paar Tagen dran einen Lösungsansatz für eine
Aufgabenstellung zu finden. Es soll möglch sein als Standard-Benutzer ein
Programmupdate durchzuführen ohne das der Benutzer ein Adminkennwort eingeben
muss.
Dieses Programmupdate benötigt Zugriff auf Systemrelevante Ordner.
Die Accountdaten des Adminkontos sind im Programm hinterlegt.

Meine Idee war es jetzt mit der Process.Start Funktion das Setup zu starten
und dort den Benutzernamen und das Passwort anzugeben (in der
ProcessStartInfo Klasse). Laut MSDN bekommt der Process ja genau die Rechte
die der angegebene Benutzer hat.
Das ganze funktioniert wunderbar, jedoch nicht mit eingeschalteter UAC :)

Ich sehe das Problem da, dass auch der sogenannte "Admin-Benutzer" mit
aktivierter UAC nicht wirklich Admin ist und dadurch auch das Setup nicht
ausführen darf. Nur wenn ich in der ProcessStartInfo Klasse keinen
Benutzernamen angebe und UseShellExecute auf true stelle, kann das Setup
gestartet werden. Dann aber muss der Benutzer das Adminpasswort im UAC Dialog
eingeben.

Ich habe sehr viel Zeit in die Recherche investiert um eine Alternative zu
finden aber bin leider nicht fündig geworden. Für eine Idee wàre ich sehr
dankbar.

Gruss
Marcel

PS: Die LogonUser und CreateProcessWithLogon API hab ich schon durch. Leider
auch kein Erfolg.
 

Lesen sie die antworten

#1 Konrad Neitzel
10/02/2010 - 13:34 | Warnen spam
Hallo Marcel!

Ich weiss nicht so recht, aber die Speicherung eines Kontos mit Username
und Passwort sorgt bei mir immer für Bauchschmerzen.

Ein mögliches Szenario für Updates könnte über einen Service
durchgeführt werden. Also z.B. in der Form:
- Eine erste Installation wird ja mit Adminrechten erfolgen. Dabei wird
auch ein Dienst mit installiert, der im System Kontext làuft.
- Wenn ein Update ansteht, kann dies an den Service übergeben werden.
Dabei kann zur Absicherung z.B. geprüft werden, ob die Anfrage korrekt
signiert wurde. (Dann hast Du nur einen public Key auf dem System.
Nirgends ein Passwort oder so!)
- Da der Service ein seperater Prozess ist, kann dieser auch schön die
ganze Applikation updaten.(Wenn die Applikation selbst irgendwas macht,
dann hast Du ggf. ja das Problem, dass eine Executable nicht upgedatet
werden kann, weil sie derzeit benutzt wird ...)

Hat aber natürlich den nachteil, dass Deine Applikation einen Service
mit bringt. Das könnte ja nach Umgebung natürlich ein Ausschlus-Grund
sein. (Aber dies ist ein Szenario, welches wir hier teilweise schon
verwenden.)

Aber vielleicht wàre ein solcher Ansatz ja bei euch möglich?

Mit den besten Grüßen,

Konrad

Ähnliche fragen