2010-08-30 3 views
24

Wie erzwinge ich meine C# Winforms Programm als Administrator auf jedem Computer ausführen? und jede Art von Betriebssystem?Wie erzwinge ich, dass mein C# Winforms-Programm als Administrator auf einem beliebigen Computer ausgeführt wird?

Ich brauche Code-Lösung (jedes Codebeispiel wird ausgezeichnet sein)

Vielen Dank im Voraus

+0

Mögliches Duplikat von [Wie erzwinge ich, dass meine .NET-Anwendung als Administrator ausgeführt wird?] (Http://stackoverflow.com/questions/2818179/how-to-force-my-net-application-to-run-as -Administrator) – amens

Antwort

43

Sie können dieses manifest in Ihre Anwendung einbetten.

<?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

für vollständige Schritte einschließlich, wie man eine Manifest-Datei in VS http://philippsen.wordpress.com/tag/requestedexecutionlevel-manifest/ –

10

Hier ist der Beispielcode, um Ihre Anwendung als Administrator auszuführen.

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 

Stellen Sie die ProcessStartInfo.Verb auf „runas“ wird es als admin laufen lassen. Hier ist Hilfe im Zusammenhang

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

+1

Ich denke, OP fragt, wie man seine Anwendung immer unter mit Admin priv 'erzwingen nicht, wie man eine Anwendung innerhalb von aC# App als Administrator –

+0

ausführen dies verursachte meine Anwendung zum Absturz .. – CodeIt

2

Die offensichtliche Antwort ist eine Manifest-Datei auf das C# Projekt hinzuzufügen, und fügen Sie die folgende Zeile:

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

aber ein eher unorthodoxer Ansatz kann auch genommen werden. Wir wissen, dass für den Zugriff auf die Registrierung Administratorrechte erforderlich sind. Wenn Sie also eine Funktion haben, die einen Registrierungsschreibzugriff enthält, wird die Funktion System.Security.SecurityException auslösen, wenn Sie das Programm nicht als Administrator ausführen. Es wird vorausgesetzt, dass Sie diese Funktion am Anfang des Programms aufrufen müssen. Wenn diese Ausnahme ausgelöst wird, können Sie den Benutzer informieren, das Programm als Administrator auszuführen und das Programm zu schließen.

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); 
    } 
} 

Hier erzählt die true in Zeile rk = rk.OpenSubKey(registryPath, true) das Programm, das es den Schreibzugriff auf die Registrierung benötigt.