翼度科技»论坛 编程开发 .net 查看内容

搞懂.NET应用程序管理员权限:三种简单方法一网打尽

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
 
概述:.NET应用程序以管理员身份运行的方法包括修改清单文件、项目文件,或在运行时动态请求管理员权限。清单文件和项目文件通过声明UAC请求,而动态请求管理员权限则在程序启动时检查并重新启动。选择适当的方法取决于项目需求和配置。
在.NET应用程序中强制以管理员身份运行,可以通过清单文件、项目文件或者在程序运行时动态请求管理员权限。下面详细讲解这三种方法的基础功能:
方法一:清单文件(.exe.manifest)

步骤:


  • 创建.NET应用程序: 创建一个.NET应用程序。
  • 修改清单文件: 添加UAC请求到清单文件。
示例源代码:

在你的应用程序项目文件夹下创建一个新的清单文件(例如app.manifest),并将以下内容添加到清单文件中:
  1. <?xml version="1.0" encoding="utf-8" standalone="yes"?>
  2. <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  3.   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  4.     <security>
  5.       <requestedPrivileges>
  6.         <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  7.       </requestedPrivileges>
  8.     </security>
  9.   </trustInfo>
  10. </assembly>
复制代码
在项目属性中的"应用程序"标签下,选择清单文件为刚刚创建的app.manifest。
方法二:项目文件 (csproj)

步骤:


  • 创建.NET应用程序: 创建一个.NET应用程序。
  • 在项目文件中配置清单文件: 设置  元素的 RequestedExecutionLevel 属性。
示例源代码:
  1. <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  2.   <PropertyGroup>
  3.     <OutputType>WinExe</OutputType>
  4.     <TargetFramework>net5.0-windows</TargetFramework>
  5.     <UseWindowsForms>true</UseWindowsForms>
  6.     <UseWPF>true</UseWPF>
  7.     <ApplicationManifest>app.manifest</ApplicationManifest>
  8.   </PropertyGroup>
  9. </Project>
复制代码
在这个示例中, 元素指定了清单文件的名称为 app.manifest。
方法三:动态请求管理员权限

步骤:


  • 创建.NET应用程序: 创建一个.NET应用程序。
  • 在程序运行时检查权限: 使用 WindowsPrincipal 检查是否以管理员身份运行,如果不是,通过 ProcessStartInfo 重新启动并请求管理员权限。
示例源代码:
  1. using System;
  2. using System.Diagnostics;
  3. using System.Security.Principal;
  4. using System.Windows.Forms;
  5. namespace AdminModeApp
  6. {
  7.     static class Program
  8.     {
  9.         [STAThread]
  10.         static void Main()
  11.         {
  12.             // 检查是否以管理员身份运行
  13.             if (!IsRunAsAdministrator())
  14.             {
  15.                 // 如果没有以管理员身份运行,则重新启动应用程序
  16.                 RunAsAdministrator();
  17.                 return;
  18.             }
  19.             Application.EnableVisualStyles();
  20.             Application.SetCompatibleTextRenderingDefault(false);
  21.             Application.Run(new MainForm());
  22.         }
  23.         private static bool IsRunAsAdministrator()
  24.         {
  25.             WindowsIdentity identity = WindowsIdentity.GetCurrent();
  26.             WindowsPrincipal principal = new WindowsPrincipal(identity);
  27.             return principal.IsInRole(WindowsBuiltInRole.Administrator);
  28.         }
  29.         private static void RunAsAdministrator()
  30.         {
  31.             // 重新启动应用程序以管理员身份
  32.             ProcessStartInfo startInfo = new ProcessStartInfo
  33.             {
  34.                 FileName = Application.ExecutablePath,
  35.                 UseShellExecute = true,
  36.                 Verb = "runas"  // 请求管理员权限
  37.             };
  38.             try
  39.             {
  40.                 Process.Start(startInfo);
  41.             }
  42.             catch (Exception ex)
  43.             {
  44.                 // 处理异常,例如用户拒绝提升权限
  45.                 MessageBox.Show("无法以管理员身份运行应用程序:" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
  46.             }
  47.             Application.Exit();
  48.         }
  49.     }
  50. }
复制代码
上述代码在应用程序启动时检查是否以管理员身份运行,如果不是,则通过 RunAsAdministrator 方法重新启动应用程序并请求管理员权限。
以上三种方法均可实现以管理员身份运行应用程序,具体选择取决于你的需求和项目配置。
 



来源:https://www.cnblogs.com/hanbing81868164/p/18081934
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具