首页 > 代码库 > 管理员权限运行

管理员权限运行

private void Form1_Load(object sender, EventArgs e)    {        if (WindowsIdentity.GetCurrent().Owner == WindowsIdentity.GetCurrent().User)   // Check for Admin privileges           {            try            {                this.Visible = false;                ProcessStartInfo info = new ProcessStartInfo(Application.ExecutablePath); // my own .exe                info.UseShellExecute = true;                info.Verb = "runas";   // invoke UAC prompt                Process.Start(info);            }            catch (Win32Exception ex)            {                if (ex.NativeErrorCode == 1223) //The operation was canceled by the user.                {                    MessageBox.Show("Why did you not selected Yes?");                    Application.Exit();                }                else                    throw new Exception("Something went wrong :-(");            }            Application.Exit();        }        else        {            //    MessageBox.Show("I have admin privileges :-)");        }    }

  

if (!IsRunAsAdministrator()){  var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase);  // The following properties run the new process as administrator  processInfo.UseShellExecute = true;  processInfo.Verb = "runas";  // Start the new process  try  {    Process.Start(processInfo);  }  catch (Exception)  {    // The user did not allow the application to run as administrator    MessageBox.Show("Sorry, this application must be run as Administrator.");  }  // Shut down the current process  Application.Current.Shutdown();}private bool IsRunAsAdministrator(){  var wi = WindowsIdentity.GetCurrent();  var wp = new WindowsPrincipal(wi);  return wp.IsInRole(WindowsBuiltInRole.Administrator);}

  

1)app.mainfest文件中

<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
节点的值设置为 asInvoker

2)在App.cs中增加以下代码:

/// <summary>        /// 检查是否是管理员身份        /// </summary>        private void CheckAdministrator()        {            var wi = WindowsIdentity.GetCurrent();            var wp = new WindowsPrincipal(wi);            bool runAsAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator);            if (!runAsAdmin)            {	// It is not possible to launch a ClickOnce app as administrator directly,	// so instead we launch the app as administrator in a new process.	var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase);	// The following properties run the new process as administrator	processInfo.UseShellExecute = true;	processInfo.Verb = "runas";	// Start the new process	try	{	    Process.Start(processInfo);	}	catch (Exception ex)	{	    ex.WriteLog();	}	// Shut down the current process	Environment.Exit(0);            }        }

3)重写 OnStartup 函数

protected override void OnStartup(StartupEventArgs e)        {	base.OnStartup(e);	CheckAdministrator();	//如果不是管理员,程序会直接退出,并使用管理员身份重新运行。	StartupUri = new Uri("MainWindow.xaml", UriKind.RelativeOrAbsolute);        }

4)保存,重新生成,发布

加入上面的代码之后,重新使用ClickOnce方式发布

管理员权限运行