• 管理员权限运行


    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方式发布

  • 相关阅读:
    【数论】错排问题
    【数论】求逆元的几种方式
    【数论】卢卡斯定理模板 洛谷P3807
    【单调队列优化dp】 分组
    【期望dp】绵羊跳弹簧
    软件工程总结
    结对项目-地铁出行路线规划程序(续)
    个人作业--week3
    个人作业-week2
    个人作业-week1
  • 原文地址:https://www.cnblogs.com/xiangxiong/p/6560513.html
Copyright © 2020-2023  润新知