WinForm实现管理员权限运行的三种方式

在visual studio开发winform程序,生成msi安装包以后,代码运行似乎没有问题。但是,若是软件安装到了C盘,软件在执行某些操作,比如写文件、读文件等操作时,有可能会因为操作系统用户权限不足导致读写不成功。关键这时候软件还不报错,可能很难发现原因。

这个问题,作为普通用户,可以考虑鼠标右键软件选择“以管理员权限运行”,就可以临时解决这个问题了。但是这个办法怎么看都挺不合适,为难用户了。

查了一下资料,于是就有了下面的解决办法记录。

方法一、采用Process.Start方法

思路很简单,就是在Program.cs入口处判断当前是不是管理员权限,如果是,则不做其他处理,如果不是,改成管理员权限。具体代码如下。修改Main方法:

 1 /// <summary>  2 /// 应用程序的主入口点。  3 /// </summary>  4 [STAThread]  5 static void Main()  6 {  7     Application.EnableVisualStyles();  8     Application.SetCompatibleTextRenderingDefault(false);  9  10     //获得当前登录的Windows用户标示 11     WindowsIdentity identity = WindowsIdentity.GetCurrent(); 12     WindowsPrincipal principal = new WindowsPrincipal(identity); 13     //判断当前登录用户是否为管理员 14     if (principal.IsInRole(WindowsBuiltInRole.Administrator)) 15     { 16         //如果是管理员,则直接运行 17         Application.Run(new FrmMain()); 18     } 19     else 20     { 21         //创建启动对象 22         ProcessStartInfo startInfo = new ProcessStartInfo(); 23         startInfo.UseShellExecute = true; 24         startInfo.WorkingDirectory = Environment.CurrentDirectory; 25         startInfo.FileName = Application.ExecutablePath; 26         //设置启动动作,确保以管理员身份运行 27         startInfo.Verb = "runas"; 28         try 29         { 30             Process.Start(startInfo); 31         } 32         catch 33         { 34             return; 35         } 36         //退出 37         Application.Exit(); 38     } 39 }

方法二、直接修改exe属性

这个方法,其实还是让用户来操作,只是避免了每次启动软件都要做而已。具体操作:右击exe程序文件,在弹出的属性对话框中,兼容性选项中,勾选“以管理员身份运行此程序”即可。

方法三、添加应用程序清单文件

这种方法比较简单。在vs的解决方案资源管理器点击项目,右击添加,新建项,选择应用程序清单列表。

添加完成后,打开app.manifest文件,将:

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

修改为:

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

于是,在生成安装包以后,正常安装使用软件,软件也可以用管理员权限读写文件了。

版权声明:

作者: freeclashnode

链接: https://www.freeclashnode.com/news/article-3231.htm

来源: FreeClashNode

文章版权归作者所有,未经允许请勿转载。

免费节点实时更新

热门文章

最新文章

归档