Heim > Backend-Entwicklung > C#.Net-Tutorial > Detaillierte Einführung in den Beispielcode von C#, bei dem das Programm standardmäßig als Administrator ausgeführt wird

Detaillierte Einführung in den Beispielcode von C#, bei dem das Programm standardmäßig als Administrator ausgeführt wird

黄舟
Freigeben: 2017-03-14 13:47:02
Original
3248 Leute haben es durchsucht

font-family:'Microsoft YaHei'; font-size:24px">1. Durch die Konfigurationsdatei ausführen das Programm als Administrator

Vista und Windows 7-Betriebssysteme haben UAC (User Account Control) hinzugefügt, um den Sicherheitsmechanismus zu verbessern, Wenn UAC aktiviert ist, kann seine Anwendung standardmäßig nicht in Systemverzeichnisse, Systemregistrierung und andere Einstellungen schreiben, die den Systembetrieb beeinträchtigen können. Dieser Mechanismus erhöht die Sicherheit des Systems erheblich , aber für Anwendungsentwickler können wir Benutzer nicht zwingen, UAC zu deaktivieren, aber manchmal müssen die von uns entwickelten Anwendungen als Administrator ausgeführt werden, also als Administrator in Win7. Wie erreichen wir das? >

Wenn wir einige

Installationsprogramme unter Win7 ausführen, werden wir feststellen, dass zunächst ein Dialogfeld angezeigt wird, in dem der Benutzer gefragt wird, ob er zulassen soll, dass dieses Programm die Konfiguration Ihres Computers ändert, aber wir Bei einer geschriebenen Anwendung wird diese Eingabeaufforderung standardmäßig nicht angezeigt und sie kann nicht mit Administratorrechten ausgeführt werden. In diesem Artikel wird erläutert, wie das Programm C# so eingerichtet wird, dass der Benutzer zur Ausführung mit Administratorrechten aufgefordert wird if

est

File

Die Standardkonfiguration ist wie folgt:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"
Nach dem Login kopieren
Nach dem Login kopieren
Wir können sehen, dass es in dieser Konfiguration ein requestExecutionLevel-Element gibt, mit dem die von der aktuellen Anwendung angeforderte Ausführungsberechtigungsstufe konfiguriert wird. Dieses Element verfügt über 3 Werte zur Auswahl, wie in der folgenden Tabelle gezeigt:
xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
Nach dem Login kopieren

asInvoker : 如果选这个,应用程序就是以当前的权限运行。

highestAvailable: 这个是以当前用户可以获得的最高权限运行。

requireAdministrator: 这个是仅以系统管理员权限运行。

默认情况下是 asInvoker。

highestAvailable 和 requireAdministrator 这两个选项都可以提示用户获取系统管理员权限。那么这两个选项的区别在哪里呢?

他们的区别在于,如果我们不是以管理员帐号登录,那么如果应用程序设置为 requireAdministrator ,那么应用程序就直接运行失败,无法启动。而如果设置为 highestAvailable,则应用程序可以运行成功,但是是以当前帐号的权限运行而不是系统管理员权限运行。如果我们希望程序在非管理员帐号登录时也可以运行(这种情况下应该某些功能受限制) ,那么建议采用 highestAvailable 来配置。

关于requestedExecutionLevel 设置的权威文档请参考下面链接:

Create and Embed an Application Manifest (UAC)

下面是修改后的配置文件:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"
Nach dem Login kopieren
Nach dem Login kopieren
xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
Nach dem Login kopieren
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the 
            requestedExecutionLevel node with one of the following.
        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
            If you want to utilize File and Registry Virtualization for backward 
            compatibility then delete the requestedExecutionLevel node.
        -->
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>
Nach dem Login kopieren
配置文件修改后,我们运行应用程序,就会首先弹出这样一个提示框,点 Yes 后,程序才可以继续运行,并且获得系统管理员的权限。
Nach dem Login kopieren
.csharpcode, 
.csharpcode pre { font-size: small; color: black; 
font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ }
 .csharpcode pre { margin: 0em; } 
 .csharpcode .rem { color:
 #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode 
 .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; }
  .csharpcode .html { color: #800000; } .csharpcode
 .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } 
  .csharpcode .lnum { color: #606060; }
Nach dem Login kopieren


下面再来看看程序如何知道当前运行在系统管理员权限还是非系统管理员权限:

        public static bool IsAdministrator()
        {
            WindowsIdentity identity = WindowsIdentity.GetCurrent();
            WindowsPrincipal principal = new WindowsPrincipal(identity);
            return principal.IsInRole(WindowsBuiltInRole.Administrator);
        }
Nach dem Login kopieren
.csharpcode, 
.csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace;
 background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color:
 #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode 
 .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; }
  .csharpcode .html { color: #800000; } .csharpcode
 .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } 
  .csharpcode .lnum { color: #606060; }
Nach dem Login kopieren


这段代码可以用于判断当前程序是否运行在系统管理员权限下。如果配置为 asInvoker,在win7 下,这个函数会返回 false ,如果是 requireAdministrator 则返回 true。

二、通过编程以管理员身份运行程序

在读写注册表“HKEY_LOCAL_MACHINE\SOFTWARE\”下的项时,明明注册表中有,但程序OpenSubKey始终返回Null,考虑到可能是因为权限的原因,于是我以管理员身份运行了一次,结果测试成功!原来真的是权限的问题,于是就在程序里面加入了默认以管理员身份运行的代码。下面让我们看看是怎么实现的吧!


程序默认以管理员身份运行

static void Main(string[] Args)
        {
            /**
             * 当前用户是管理员的时候,直接启动应用程序
             * 如果不是管理员,则使用启动对象启动程序,以确保使用管理员身份运行
             */
            //获得当前登录的Windows用户标示
            System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
            //创建Windows用户主题
            Application.EnableVisualStyles();

            System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
            //判断当前登录用户是否为管理员
            if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator))
            {
                //如果是管理员,则直接运行

                Application.EnableVisualStyles();
                Application.Run(new Form1());
            }
            else
            {
                //创建启动对象
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                //设置运行文件
                startInfo.FileName = System.Windows.Forms.Application.ExecutablePath;
                //设置启动参数
                startInfo.Arguments = String.Join(" ", Args);
                //设置启动动作,确保以管理员身份运行
                startInfo.Verb = "runas";
                //如果不是管理员,则启动UAC
                System.Diagnostics.Process.Start(startInfo);
                //退出
                System.Windows.Forms.Application.Exit();
            }
        }
Nach dem Login kopieren

打开程序集里的Program.cs文件,并将其中Main方法中的代码替换为以上代码即可实现程序默认以管理员身份运行。


Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in den Beispielcode von C#, bei dem das Programm standardmäßig als Administrator ausgeführt wird. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
WertBeschreibungKommentar
asInvokerDie Anwendung wird mit demselben Zugriffstoken wie der übergeordnete Prozess ausgeführt.Empfohlenende
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the
            requestedExecutionLevel node with one of the following.
        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
            If you want to utilize File and Registry Virtualization for backward
            compatibility then delete the requestedExecutionLevel node.
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>
Nach dem Login kopieren
für Standardbenutzeranwendungen Refraktoring mit internen Höhenpunkten durchführen , gemäß der Anleitung weiter oben in diesem
Dokument

.

highestAvailable Die Anwendung wird mit den höchsten Berechtigungen ausgeführt aktuellerBenutzer kann abrufen. Empfohlen für Anwendungen im gemischten Modus. Planen Sie, die Anwendung in einer zukünftigen Version zu refraktieren.
requireAdministrator Die Anwendung wird nur für Administratoren ausgeführt und erfordert, dass die Anwendung mit dem vollständigen Zugriffstoken eines Administrators gestartet wird. Empfohlen für reine Administratoranwendungen. Interne Höhenpunkte werden nicht benötigt. Die Anwendung wird bereits mit erhöhten Rechten ausgeführt.