首页 > 其他分享 >WinForm实现管理员权限运行的三种方式

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

时间:2023-12-17 12:33:08浏览次数:31  
标签:文件 Application 管理员 软件 startInfo 权限 WinForm

来源:https://mp.weixin.qq.com/s/ydBWABy7kwOWxNCQu4qYMA

 

在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" />

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

标签:文件,Application,管理员,软件,startInfo,权限,WinForm
From: https://www.cnblogs.com/huashanqingzhu/p/17908934.html

相关文章

  • openGauss学习笔记-161 openGauss 数据库运维-备份与恢复-导出数据-使用gs_dump和gs_d
    openGauss学习笔记-161openGauss数据库运维-备份与恢复-导出数据-使用gs_dump和gs_dumpall命令导出数据-导出所有数据库-无权限角色导出数据161.1无权限角色导出数据gs_dump和gs_dumpall通过-U指定执行导出的用户帐户。如果当前使用的帐户不具备导出所要求的权限时,会无法导出......
  • Power BI 安全和数据访问权限管理
    介绍PowerBI是微软提供的一款在线软件服务(也称作SaaS,即软件即服务)。通过它,用户能够便捷迅速地制作自助商业智能仪表板、报告、语义模型和可视化效果。使用PowerBI,用户可以连接到众多不同的数据源,整合和处理这些数据源的数据,随后创建可以与他人分享的报告和仪表板。背景随着越......
  • winform中也可以这样做数据展示✨
    1、前言在做winform开发的过程中,经常需要做数据展示的功能,之前一直使用的是gridcontrol控件,今天想通过一个示例,跟大家介绍一下如何在winformblazorhybrid中使用antdesignblazor中的table组件做数据展示。2、效果先来看看实现的效果:3、具体实现怎么在winformblazorhyb......
  • linux文件权限
    setfacl(Setfileaccesscontrollists)是一种在Linux系统中设置文件访问控制列表(AccessControlLists,ACL)的工具。ACL是一种扩展的权限机制,用于更细粒度地控制文件和目录的访问权限。setfacl命令用于设置文件的ACL规则。它允许用户在文件或目录上定义不同用户或组的访问权限。以......
  • 解决.net core开发过程中端口总是无缘无故被占用的问题,提示SocketException: 以一种访
    先给出原因和方案:  是Hyper-V每次启动随机保留端口段,导致所要使用的端口被系统保留,导致无法使用的问题解决方法就是,指定系统保留端口的范围,避开开发时使用的端口即可。powershell管理员身份使用下面的命令设置。netshintipv4setdynamictcpstart=49152nu......
  • doris用户权限管理
    Doris用户权限和MySQL相差不多,在Doris中,GRANT命令用于赋予指定用户或角色指定的权限。使用语法如下:GRANTprivilege_listONdb_name[.tbl_name]TOuser_identity[ROLErole_name]GRANTprivilege_listONRESOURCEresource_nameTOuser_identity[ROLErole_name]pr......
  • 玩转 K8s 权限控制:RBAC + kubeconfig 搞定 kubectl 权限管理那些事
    目录1.先抛需求2.RBAC配置2.1.K8s里的RBAC机制介绍2.2创建ServiceAccount、Role、RoleBinding和Secret3.配置kubeconfig文件3.1kubeconfig文件介绍3.2具体的kubeconfig配置3.3kubeconfig切换测试4.总结1.先抛需求当一个K8s集群需要被多个租户共享时,就......
  • springboot+vue小白升级之路07-快速实现批量删除、小白升级之路08-实现批量导入导出ex
    我们接着之前的内容,全部代码我贴一下,大家参考使用。数据库droptableifexistsan_user;createtablean_user( idintnotnullauto_incrementprimarykeycomment'主键id', namevarchar(255)notnulluniquecomment'姓名', `password`varchar(255)notnullcomment......
  • DevExpress WinForms Pivot Grid组件,一个类似Excel的数据透视表控件(二)
    界面控件DevExpressWinForms的PivotGrid组件是一个类似Excel的数据透视表控件,用于多维(OLAP)数据分析和跨选项卡报表。在上文中(点击这里回顾>>)我们介绍了DevExpressWinFormsPivotGrid组件的性能、分析服务、数据塑造能力等,本文将继续介绍该组件的其他功能,欢迎持续关注我们哦~......
  • 上机编程[文件目录权限管理系统]学习交流
    请你设计一个文件目录权限管理系统,实现以下功能:·  DirPermSystem(int[]path,int[]statuses) —— 初始化文件目录树及其初始状态o   path[i] 下标表示目录编号,值表示其上一级目录的编号(根目录编号为 0,path[0]固定为 -1)。o   statuses[i] 表示目录 i ......