2010-02-17 15 views
20

'da yükseltme talep ediyorum. Çok nadiren de olsa Yönetici'ye yükseltme gerektiren bir programım var, bu yüzden manifestimi kalıcı bir yükseklik gerektirecek şekilde ayarlamak istemiyorum.Windows 7 ve Vista UAC - Programsal olarak C#

Yalnızca gerektiğinde, yükseltmeyi Programlı olarak nasıl yapabilirim?

Ben Bu doğru cevap, ancak C#

cevap

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

kullanıyorum 'kullanıcı yükseklik iptal eğer şikayet böylece RunElevated' muhtemelen' bool' dönmelidir. –

+2

Ayrıca, uygulamayı kapatıp yeniden başlatacağınız için, kaydetme durumu varsa, bununla ilgilenin. Ana uygulamayı kapatmadan yüksekliğe ihtiyaç duyan şeyleri bölümlere ayırmayı ve yükseltmeyi tercih edebilirsiniz. –