Adminrechte ergattern - Vista.
-
Hallo,
Mein program ( in C, ohne schnickschnack) schreibt und liest aus einer Datei die im gleichen Verzeichniss wie die exe steht. Eigentlich kein Problem, aber wenn die Datei in c:\program files\folder steht kann nicht geschrieben werden.
Viele Programme fragen nach adminrechten, so das der user entscheiden kann, was gemacht wird.
Wie kann man dieses Verhalten in C(falls möglich) erreichen."code":
getAdminRights(); writeFile(); releaseAdminRights();
oder bessere Variante
doINeedAdminrights(writeFile()); getAdminRights(); writeFile(); releaseAdminRights();
Ich brauche ein Beispiel, beziehungsweise das geignete Stichwort, damit google mir geschickt weiterhilft.
-
Nachträglich mit Admin-Rechten hantieren:
Developing Applications that Require Administrator PrivilegeDie meisten scheinen mir momentan die "ShellExecute mit runas-verb"-Variante zu wählen: D.h. einfach sich selbst über ShellExecute dank "runas"-Verb mit Admin-Rechten starten und als Kommandozeilen-Argument mit angeben welcher Dialog/welche Aktion mit Admin-Rechten durchgeführt werden soll. Wenn die Aktion fertig ist, beendet sich das Programm mit Admin-Rechten und es geht im 1. Programm weiter.
------
Sofern die Daten nicht tatsächlich zwangsweise im Programme-Ordner rumliegen müssen:
1. Gucken ob die Datei im Anwendungsdatenordner liegt und ggf. die benutzen, falls nicht:
2. Versuchen die Datei direkt im Programme-Ordner zu beschreiben und wenn es nicht klappt:
3. Datei in einen passenden Anwendungsdaten-Ordner (der dafür ohnehin gedacht ist) kopieren und dann dort darauf zugreifen.An den Pfad zum Anwendungsdatenordner kommt man über:
SHGetSpecialFolderPathDie verschiedenen Anwendungsdaten-Ordner wären (Win7-Standardordner):
CSIDL_APPDATA - C:\Users\Username\AppData\Roaming
Nicht Rechner gebunden ("Roaming User Profiles"). Diesen Ordner verwenden die meisten Programme.CSIDL_LOCAL_APPDATA - C:\Users\Username\AppData\Local
RechnergebundenCSIDL_COMMON_APPDATA - C:\Users\Default\AppData\Local
Rechnergebunden und da kann jeder Benutzer drauf zugreifen(Die Anwendungsdaten-Ordner werden von gescheiter Backup-Software und dem Windows-eigenen Datensicherungstool mitgesichert)
-
Über das /MANIFESTUAC Linker Flag kannst du den erforderlichen UAC level für deine Anwendung einstellen. Es gibt keinen Weg den UAC Privileg Level eines laufenden Prozesses zu erhöhen.
-
Wie jetzt? Man kann einen Prozess, der nicht elevated ist, nachträglich Dinge tun lassen, die man nur elevated tun kann? Ein COM Objekt erstellen?
Wie was? Hilfe
-
Nur das COM-Objekt hat mehr Rechte, nicht der Prozess selbst.
Außerdem kommt natürlich der UAC-Dialog.
http://msdn.microsoft.com/en-us/library/ms679687.aspx
-
geeky schrieb:
Nur das COM-Objekt hat mehr Rechte, nicht der Prozess selbst.
Und das COM Objekt muss Out-Of-Process sein!
-
Lösung: eine zweite .exe die per system() aufgerufen wird.
Diese exe wird min einem manifest ausgestattet, so dass sie als admin startet.Danke für die hilfe, hat mich weit gebracht.
-
system? uäääks.
Nimm lieber ShellExecute.