You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 控制台应用如何实现以管理员身份自动重启功能?

实现难度说明

该功能极易实现,仅用到.NET内置的权限校验、进程操作API,无需引入第三方依赖,20行以内代码即可完成核心逻辑。

核心实现逻辑
  • 启动时先校验当前进程是否已获得管理员权限
  • 若未获得权限,弹出确认提示询问用户是否需要提权重启
  • 用户确认后,以runas动词启动当前程序的新实例(自动触发系统UAC权限确认弹窗),传递原有命令行参数后关闭当前进程
完整代码示例

如需弹出类似Notepad++的图形化确认框,需要先在项目中引用System.Windows.Forms:

.NET Core/.NET 5+ 项目可直接在.csproj配置文件中添加<UseWindowsForms>true</UseWindowsForms>配置项完成引用。

using System;
using System.Diagnostics;
using System.Security.Principal;
using System.Windows.Forms;

namespace FileDeleteTool
{
    class Program
    {
        static void Main(string[] args)
        {
            // 校验当前是否拥有管理员权限
            using (WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent())
            {
                WindowsPrincipal principal = new WindowsPrincipal(currentIdentity);
                bool hasAdminPermission = principal.IsInRole(WindowsBuiltInRole.Administrator);

                // 无权限时触发提权逻辑
                if (!hasAdminPermission)
                {
                    DialogResult confirmResult = MessageBox.Show(
                        "当前删除操作需要管理员权限,是否以管理员身份重启程序?",
                        "权限不足",
                        MessageBoxButtons.YesNo,
                        MessageBoxIcon.Warning);

                    if (confirmResult == DialogResult.Yes)
                    {
                        try
                        {
                            ProcessStartInfo restartInfo = new ProcessStartInfo
                            {
                                UseShellExecute = true,
                                WorkingDirectory = Environment.CurrentDirectory,
                                FileName = Process.GetCurrentProcess().MainModule.FileName,
                                // 传递原有命令行参数
                                Arguments = string.Join(" ", args),
                                // 核心配置:触发UAC提权
                                Verb = "runas"
                            };
                            Process.Start(restartInfo);
                        }
                        catch (System.ComponentModel.Win32Exception)
                        {
                            // 捕获用户在UAC弹窗点击取消的异常
                            MessageBox.Show("已取消权限申请,程序无法执行删除操作", "提示");
                        }
                        // 关闭当前非管理员进程
                        Environment.Exit(0);
                    }
                }
            }

            // 此处放置你原有删除文件的业务逻辑
            Console.WriteLine("已获取管理员权限,开始执行删除操作...");
        }
    }
}
纯控制台版本实现

如果你不需要图形化弹窗,可直接将MessageBox逻辑替换为控制台文字交互,无需额外引用程序集:

// 替换原MessageBox部分代码即可
Console.WriteLine("当前删除操作需要管理员权限,是否以管理员身份重启程序?(Y/N)");
if (Console.ReadKey(true).Key == ConsoleKey.Y)
{
    // 其余提权重启逻辑和上方一致
}

内容的提问来源于stack exchange,提问作者buga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:24:01