首页 文章

如何强制我的.NET应用程序以管理员身份运行?

提问于
浏览
762

一旦我的程序安装在客户端计算机上,如何强制我的程序在Windows 7上以管理员身份运行?

12 回答

  • 6

    您将要修改嵌入在程序中的清单 . 这适用于Visual Studio 2008及更高版本:Project Add New Item,选择"Application Manifest File" . 将 <requestedExecutionLevel> 元素更改为:

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

    用户在启动程序时会收到UAC提示 . 明智地使用;他们的耐心很快就会消失 .

  • 1005

    requestedExecutionLevel 元素添加到清单只是成功的一半;你必须记住UAC可以关闭 . 如果是,您必须检查旧学校方式并在用户不是管理员时设置错误对话框
    (在你的主题的 CurrentPrincipal 上调用IsInRole(WindowsBuiltInRole.Administrator)) .

  • -3

    我实现了一些手动执行的代码:

    using System.Security.Principal;
    public bool IsUserAdministrator()
    {
        bool isAdmin;
        try
        {
            WindowsIdentity user = WindowsIdentity.GetCurrent();
            WindowsPrincipal principal = new WindowsPrincipal(user);
            isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
        }
        catch (UnauthorizedAccessException ex)
        {
            isAdmin = false;
        }
        catch (Exception ex)
        {
            isAdmin = false;
        }
        return isAdmin;
    }
    
  • 138

    详细步骤如下 .

    • 将应用程序清单文件添加到解决方案中

    • 将应用程序设置更改为"app.manifest"

    • 将"requestedExecutionLevel"的标记更新为requireAdministrator .

    Adding file in Solution

    Select Application Manifest File

    Select Manifest option

    Update Manifest file

    请注意,使用此代码需要关闭ClickOnce的安全设置,为此,请进入属性 - >安全性 - > ClickOnce安全性

  • 4

    您可以在EXE文件中嵌入清单文件,这将导致Windows(7或更高版本)始终以管理员身份运行该程序 .

    您可以在Step 6: Create and Embed an Application Manifest (UAC)(MSDN)中找到更多详细信息 .

  • 2

    在Visual Studio 2008上工作时,右键单击 Project -> Add New Item ,然后选择 Application Manifest File .

    在清单文件中,您将找到标签 requestedExecutionLevel ,您可以将级别设置为三个值:

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

    要么

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

    要么

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

    要将应用程序设置为以管理员身份运行,您必须选择中间应用程序 .

  • 51

    在Visual Studio 2010中,右键单击项目名称 . 点击“查看Windows设置”,生成并打开一个名为“app.manifest”的文件 . 在此文件中,将“asInvoker”替换为“requireAdministrator”,如文件中注释部分所述 .

  • 39

    按照

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

    如果您不知道如何添加应用程序清单,则需要添加应用程序清单 . 由于某些项目不会自动添加单独的清单文件,因此首先转到项目属性,导航到“应用程序”选项卡,然后检查以确保项目不排除点击底部的清单 .

    • 接下来,右键单击项目

    • 添加新项目

    • 最后,找到并单击Application Manifest File

  • 15

    在代码中执行此操作的另一种方法是检测进程是否像the answer by @NG.中的管理员一样运行 . 然后再次打开应用程序并关闭当前应用程序 .

    当应用程序在某些条件下运行时仅需要管理员权限时,例如将自身安装为服务时,我会使用此代码 . 因此,它不需要像其他答案一样强制执行管理员 .

    请注意下面的代码 NeedsToRunAsAdmin 是一种检测当前条件是否需要管理员权限的方法 . 如果返回 false ,代码将不会提升自身 . 这是这种方法相对于其他方法的主要优点 .

    尽管此代码具有上述优点,但它确实需要重新启动自身作为一个并不总是您想要的新流程 .

    private static void Main(string[] args)
    {
        if (NeedsToRunAsAdmin() && !IsRunAsAdmin())
        {
            ProcessStartInfo proc = new ProcessStartInfo();
            proc.UseShellExecute = true;
            proc.WorkingDirectory = Environment.CurrentDirectory;
            proc.FileName = Assembly.GetEntryAssembly().CodeBase;
    
            foreach (string arg in args)
            {
                proc.Arguments += String.Format("\"{0}\" ", arg);
            }
    
            proc.Verb = "runas";
    
            try
            {
                Process.Start(proc);
            }
            catch
            {
                Console.WriteLine("This application requires elevated credentials in order to operate correctly!");
            }
        }
        else
        {
            //Normal program logic...
        }
    }
    
    private static bool IsRunAsAdmin()
    {
        WindowsIdentity id = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(id);
    
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    
  • 10

    这是这个的简化版answer

    public bool IsUserAdministrator()
    {
        try
        {
            WindowsIdentity user = WindowsIdentity.GetCurrent();
            WindowsPrincipal principal = new WindowsPrincipal(user);
            return principal.IsInRole(WindowsBuiltInRole.Administrator);
        }
        catch
        {
            return false;
        }
    }
    
  • 10

    您可以使用ClickOnce安全设置创建清单,然后将其禁用:

    Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings
    

    单击它后,将在项目的属性文件夹下创建一个名为 app.manifest 的文件,一旦创建,您可以取消选中 Enable ClickOnce Security Settings 选项

    打开该文件并更改此行:

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

    至:

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

    这将使程序需要管理员权限 .

  • 40

    右键单击您的可执行文件,转到“属性”>“兼容性”,然后选中“以管理员身份运行此程序”框 .

    如果您想以管理员身份为所有用户运行它,请在“更改所有用户的设置”中执行相同的操作 .

相关问题