Wie wollen Sie de-erheben Privilegien für ein Kind-Prozess
Frage
Ich weiß, wie ein Prozess mit Admin-Privilegien von einem Prozess starten mit:
proc.StartInfo.UseShellExecute = true;
proc.StartInfo.Verb = "runas";
wo proc ist ein System.Diagnostics.Process. Aber wie macht man das Gegenteil?
Wenn der Prozess, den Sie in sind bereits erhöht, wie starten Sie den neuen Prozess ohne Admin-Rechte? das neue Verfahren mit dem gleichen Berechtigungsebene wie Windows Explorer, so dass keine Änderung, wenn UAC genauer gesagt, starten wir brauchen, ist deaktiviert, aber wenn UAC aktiviert ist, aber unser Prozess ausgeführt wird erhöht, müssen wir eine bestimmte Operation un-erhöht auszuführen weil wir ein virtuelles Laufwerk und wenn es erstellt mit erhöhten Berechtigungen und Windows Explorer ausgeführt unerhöhten es wird nicht angezeigt.
sind die SchaffungFühlen Sie sich frei, den Titel zu etwas ändern besser, ich konnte nicht mit einer guten Beschreibung kommen.
Lösung 2
Am Ende haben wir mit der Probe aus diesem Code Project Artikel: Hohe Höhe kann sein schlecht für Ihre Anwendung: Wie man einen nicht erhöhten Prozess am Ende der Installation starten
Es scheint so weit zu arbeiten, ich sammle sie spritzt in RUNDLL32.EXE, mein C ++ / Win32 ziemlich schwach ist, so dass ich nicht sehen viel in die eigentliche Implementierung, nur nutzt es. Bestätigt, dass es in Vista und Win7 sowohl x86 und x64 funktioniert (zumindest für uns, x86 und x64 erfordern unterschiedliche DLL, die für bei geprüfter Zeit installieren und die richtigen einer verwendet wird).
Andere Tipps
Sie können mit ProcessStartInfo.UserName und ProcessStartInfo.Password spezifizieren die erklären Sie Ihren Prozess wollen unter auszuführen.
class Program
{
static void Main(string[] args)
{
var psi = new ProcessStartInfo(@"c:\windows\system32\whoami.exe");
var password = new SecureString();
password.AppendChar('s');
password.AppendChar('e');
password.AppendChar('c');
password.AppendChar('r');
password.AppendChar('e');
password.AppendChar('t');
psi.Password = password;
psi.UserName = "username";
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
var p = new Process();
p.StartInfo = psi;
p.Start();
p.WaitForExit();
Console.WriteLine(p.StandardOutput.ReadToEnd());
}
}