2010-08-30 8 views
24

Nasıl herhangi bir bilgisayarda yönetici olarak çalıştırmak benim C# Win programı zorlamak için? ve herhangi bir işletim sistemi?C# Winforms programımı herhangi bir bilgisayarda yönetici olarak çalıştırmaya nasıl zorlanırım?

ben kod çözümü (herhangi bir örnek kod mükemmel olacaktır) peşin

+0

Olası yinelenen [Nasıl yönetici olarak çalıştırmak için .NET uygulamasını zorlamak için?] (http://stackoverflow.com/questions/2818179/how-to-force-my-net-application-to-run-as -yönetici) VS http://philippsen.wordpress.com/tag/requestedexecutionlevel-manifest/ – amens

cevap

43

yılında

sayesinde, uygulamanız içine bu bildirim gömebilirsiniz gerekir.

<?xml version="1.0" encoding="utf-8" ?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.0.0.0" name="MyApplication" /> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
     <security> 
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
       <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
      </requestedPrivileges> 
     </security> 
    </trustInfo> 
</asmv1:assembly> 
+13

OP daima yönetici priv yıllardan ile altında başvurusunu zorlamak nasıl istiyor aC# app içinden herhangi bir uygulamayı yönetici –

10

Uygulamanızı yönetici olarak çalıştırmak için örnek kod.

ProcessStartInfo proc = new ProcessStartInfo(); 
proc.UseShellExecute = true; 
proc.WorkingDirectory = Environment.CurrentDirectory; 
proc.FileName = Application.ExecutablePath; 
proc.Verb = "runas"; 
try 
{ 
    Process.Start(proc); 
} 
catch 
{ 
    // The user refused the elevation. 
    // Do nothing and return directly ... 
    return; 
} 
Application.Exit(); // Quit itself 

“Runas” o yönetici olarak çalışmasına izin edecek kadar ProcessStartInfo.Verb ayarlayın. İşte SSS

http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/28f84724-af3e-4fa1-bd86-b0d1499eaefa#x_FAQAnswer91

+1

bence de bildiri dosyası nasıl ekleneceğini dahil olmak üzere tam adımlar için –

+0

olarak çalıştırmak için değil, bu benim uygulama çökmesine neden oldu .. – CodeIt

2

açık cevap C# projesi için bir bildirim dosyası eklemek ve aşağıdaki satırı eklemektir:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

Ama oldukça alışılmışın dışında bir yaklaşım da alınabilir. Kayıt defteri erişiminin yönetici ayrıcalıklarını gerektirdiğini biliyoruz. Bir programı yönetici olarak çalıştırın yoksa Yani, bir kayıt defteri yazma erişimi içeren bir işlev varsa, işlev bir System.Security.SecurityException atacağım. Programın başında bu işlevi çağırmanız gerektiği ima edilir. Bu istisna atılırsa, programı yönetici olarak çalıştırması ve programı kapatması için kullanıcıyı bilgilendirebilirsiniz. İşte

public void enforceAdminPrivilegesWorkaround() 
{ 
    RegistryKey rk; 
    string registryPath = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\"; 

    try 
    { 
     if(Environment.Is64BitOperatingSystem) 
     { 
      rk = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64); 
     } 
     else 
     { 
      rk = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32); 
     } 

     rk = rk.OpenSubKey(registryPath, true); 
    } 
    catch(System.Security.SecurityException ex) 
    { 
     MessageBox.Show("Please run as administrator"); 
     System.Environment.Exit(1); 
    } 
    catch(Exception e) 
    { 
     MessageBox.Show(e.Message); 
    } 
} 

, hat rk = rk.OpenSubKey(registryPath, true) içinde true o kayıt defterine yazma erişimi ihtiyacı programı söyler. arasında

İlgili konular