Wie Sie de-Erhöhung von Berechtigungen für ein Kind-Prozess
Ich weiß, wie ich einen Prozess starten mit Admin-rechten aus einem Prozess mit:
proc.StartInfo.UseShellExecute = true;
proc.StartInfo.Verb = "runas";
wo proc ist ein System.Diagnostik.Prozess. Wie aber findet man das Gegenteil tun?
Wenn der Prozess Sie sind in ist schon gehoben, aber wie wollen Sie starten den neuen Prozess ohne admin-Rechte? Genauer gesagt, müssen wir starten den neuen Prozess mit derselben Berechtigungsstufe wie Windows Explorer, so dass keine änderung wenn UAC deaktiviert ist, aber wenn die Benutzerkontensteuerung aktiviert ist, aber der Prozess läuft hoch, wir müssen zum ausführen einer bestimmten operation, die un-erhöhte, weil wir erstellen ein virtuelles Laufwerk und wenn es erstellt wurde, mit erhöhten Berechtigungen und Windows explorer ausgeführt wird unelevated es wird nicht zeigen, bis.
Fühlen Sie sich frei den Titel zu ändern, um etwas besser, ich konnte nicht kommen mit einer guten Beschreibung.
- Gleiche Frage: stackoverflow.com/questions/196949/... Die Antwort sieht beängstigend wenn.
- Es ist nicht nur beängstigend, das ist nicht richtig. UAC elevation ist ein Weg und es gibt keinen dokumentierten Weg, um zurück zu gehen (Injektion in explorer.exe oder über den Task Scheduler ist Weg hacky und wahrscheinlich nicht eine gute Idee)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung für Sie sein EXPLORER.exe Prozess.
Die Idee ist, führen Sie den Prozess im UN-erweiterten Modus, mithilfe der windows-Datei-explorer-Prozess
explorer.exe
(info).Lets sagen, dass der Prozess, den wir starten wollen ist auf
$TEMP\MyUnElevatedProcess.exe
.So, für den NSIS-code, das ich gerade schreiben: (aber kann ausgeführt werden in JEDER Sprache)
Beispiel-code (mit NSIS installer)
***code entnommen http://mdb-blog.blogspot.com/2013/01/nsis-lunch-program-as-user-from-uac.html
!define MUI_FINISHPAGE_RUN "$WINDIR\explorer.exe"
und zweite Zeile:!define MUI_FINISHPAGE_RUN_PARAMETERS "$TEMP\MyUnElevatedProcess.exe"
.$\"
wie:!define MUI_FINISHPAGE_RUN_PARAMETERS '$\"$TEMP\MyUnElevatedProcess.exe$\"'
.Landeten wir verwenden das Beispiel von diesem Code Project Artikel: Hohe Höhe kann schlecht für Ihre Anwendung: so starten Sie eine non-elevated-Prozess am Ende der installation
Scheint es soweit zu funktionieren, ich nehme an, es spritzt in RunDll32.exe meine C++/Win32 ist ziemlich schwach, so dass ich nicht allzu viel in der tatsächlichen Umsetzung, nur es ist zu verwenden. Bestätigt, dass es funktioniert in Vista und Win7 x86 und x64 (zumindest für uns -, x86-und x64-erfordern unterschiedliche dll, die überprüft, die bei der Installation Zeit und der richtigen eine verwendet wird).
Wenn Sie anfangen wollen, ein unelevated Prozess aus einer erhöhten, das man kopieren Sie den access token des shell-Prozess und es verwenden, um einen neuen Prozess starten.
Können Sie ProcessStartInfo.Benutzername und ProcessStartInfo.Passwort das Konto angeben, Sie möchten, dass Ihre Verfahren für die Ausführung unter.
Everyone
Benutzer hat einige versteckte Passwort? komisch.