WPF:以管理员身份运行程序

方法一(推荐):
添加应用程序清单文件app.manifest,并更改 Windows 用户帐户控制级别。

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


替换为

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

方法二:
修改App.xaml.cs,重写OnStartup成员方法

缺点:加上此段代码后,无法跟踪调试程序
解决办法:屏蔽此段代码,以管理员身份启动Visual Studio,调通程序后再解除屏蔽

/* ----------------------------------------------------------
 * 文件名称:App.xaml.cs
 * 
 * 作者:秦建辉
 * 
 * 微信:splashcn
 * 
 * 博客:http://www.firstsolver.com/wordpress/
 * 
 * 开发环境:
 *      Visual Studio V2017
 *      .NET Framework 4 Client Profile
 *      
 * 版本历史:
 *      V1.0	2017年06月16日
 *              以管理员身份启动程序
 * 
 * 说明:
 *      缺点:加上此段代码后,无法跟踪调试程序
 *      解决办法:屏蔽此段代码,以管理员身份启动Visual Studio,调通程序后再解除屏蔽
 * ------------------------------------------------------------ */
using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
using System.Windows;

namespace Splash
{
    /// 
<summary>
    /// App.xaml 的交互逻辑
    /// </summary>

    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            // 检测当前登录用户的组成员身份是否是管理员
            if (!new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator))
            {   // 创建启动对象
                ProcessStartInfo startInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase);

                // 设置启动参数
                startInfo.Arguments = string.Join(" ", Environment.GetCommandLineArgs());

                // 设置启动动作,确保以管理员身份运行
                startInfo.Verb = "runas";

                // 启动UAC
                Process.Start(startInfo);

                // 退出
                Environment.Exit(0);
            }
        }
    }
}

Comments are closed.