LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

了解C#程序以管理员权限运行的实现

admin
2024年10月20日 23:16 本文热度 263

前言

自 Windows Vista  开始,系统就增加了UAC(用户账户控制) 的安全机制,当 UAC 被打开,我们即使以管理员权限登录,应用程序默认情况下也无法对系统目录、系统注册表等进行操作,从而提升了系统的安全性。但对我们开发的应用程序来说,程序如何以管理员的方式运行,则需开发者考虑。本文介绍了 C# 程序如何实现用户以管理员权限运行。

实现

1、修改应程序文件的属性

在安装好的应用程序目录中,右击程序文件,选择属性,然后在弹出的属性界面中找到兼容性标签页,勾选以管理员身份运行此程序。其实这种方式并不是开发者实现的,只是用户根据指引调整实现。这为用户者带来了不少的麻烦,操作起来也不友好。

2、通过配置应用程序清单文件

在 C# 的项目上,可通过右击项目,选择添加,在新项中选择应用程序清单文件(仅限Windows) 添加文件到项目中。打开文件,找到与UAC相关设置项。

<requestedExecutionLevel  level="asInvoker" uiAccess="false" />修改为:<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

修改文件后,将清单文件添加到项目的资源中,右击项目-->属性-->资源-->添加资源文件(选择app.manifest)。重新生成项目后,打开应用程序时就会提示需要以管理员权限运行。如下图:

注意:通过配置上面方式后,我们应该使用管理员身份运行 Microsoft Visual Studio。否则提示下图:

3、通过在程序入口编写代码

在应用程序入口文件 Program.cs 添加相关代码。主要使用Process.Start 方式启动应用程,使用此方式 ,运行程序时,也会提示以管理员身份运行,需要用户点击提示才以启动程序。

using Microsoft.Win32;using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Security.Principal;using System.Threading.Tasks;using System.Windows.Forms;
namespace Fountain.WinForms.UACDemo{    internal static class Program    {        internal static ApplicationContext context = null;        /// <summary>        /// 应用程序的主入口点。        /// </summary>        [STAThread]        static void Main()        {            Application.EnableVisualStyles();            Application.SetCompatibleTextRenderingDefault(false);            if (IsRunAsAdmin())            {                // 是管理员角色,管理员权限运行                context = new ApplicationContext(new FormMain());                Application.Run(context);            }            else            {                // 使用 ProcessStartInfo 以管理员方式启动                RunAsAdmin();                //退出                Application.Exit();            }        }        /// <summary>        /// 使用 ProcessStartInfo 以管理员方式启动        /// </summary>        public static void RunAsAdmin()        {            ProcessStartInfo startInfo = new ProcessStartInfo();            //设置以管理员方式启动标记            startInfo.Verb = "runas";            //使用shell启动进程            startInfo.UseShellExecute = true;            startInfo.FileName = Process.GetCurrentProcess().MainModule.FileName;            Process.Start(startInfo);        }        /// <summary>        /// 判断当前角色,是否为管理员权限运行        /// </summary>        /// <returns></returns>        public static bool IsRunAsAdmin()        {            // 获取当前的windows 用户            WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();            // 检查 获取当前的windows 用户 的 Windows 组成员身份。            WindowsPrincipal windows = new WindowsPrincipal(windowsIdentity);            // 判断当前用户是否是管理员            if (windows.IsInRole(WindowsBuiltInRole.Administrator))            {                return true;            }            return false;        }            }}

小结

上面三种方式,除第一种方式,不是在编写应用程序时指定以管理员权限方式启动的实现,但都能实现管理员权限运行应用程序的目的。在使用代码时,我们还可增加判断当前是否开启UAC、判断UAC管理员提升权限提示行为等来确认启动管理员权限运行的提前条件。希望这些内对您有所帮助,如有不到之处,请多多包涵。如果你觉得还有其它例子欢迎留言。


该文章在 2024/10/22 12:10:40 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved