2010-02-17 5 views
20

Ich habe ein Programm, das nur sehr selten eine Erhöhung auf Admin erfordert, so dass ich nicht möchte, dass mein Manifest permanente Erhöhung erfordert.Windows 7 und Vista UAC - programmatisch Erhöhung in C#

Wie kann ich die Höhe programmatisch nur dann anfordern, wenn ich sie brauche?

Ich bin mit C#

Antwort

24
WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); 
bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator); 

if (!hasAdministrativeRight) 
{ 
    RunElevated(Application.ExecutablePath); 
    this.Close(); 
    Application.Exit(); 
} 

private static bool RunElevated(string fileName) 
{ 
    //MessageBox.Show("Run: " + fileName); 
    ProcessStartInfo processInfo = new ProcessStartInfo(); 
    processInfo.Verb = "runas"; 
    processInfo.FileName = fileName; 
    try 
    { 
     Process.Start(processInfo); 
     return true; 
    } 
    catch (Win32Exception) 
    { 
     //Do nothing. Probably the user canceled the UAC window 
    } 
    return false; 
} 
+2

Das ist die richtige Antwort, aber 'RunElevated' sollte wohl eine' bool' zurückkehren, so dass Sie sich beschweren können, wenn der Benutzer Erhebung abgebrochen. –

+2

Auch, da Sie die App schließen und neu starten werden, wenn es einen Zustand zu speichern gibt, kümmern Sie sich darum. Sie können es vorziehen, das Material, das erhöht werden soll, zu partitionieren und das erhöhte zu starten, ohne die Hauptanwendung zu schließen. –