zoukankan      html  css  js  c++  java
  • 管理员权限运行

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

  • 相关阅读:
    SpringCloudStream实例
    Gateway环境搭建,通过YML文件配置
    Hystrix图形化监控
    Hystrix服务降级
    SpringBootのRedis
    springboot之缓存
    springboot整合JPA
    留言板
    Python 京东口罩监控+抢购
    2019年 自我总结
  • 原文地址:https://www.cnblogs.com/xiangxiong/p/6560513.html
Copyright © 2011-2022 走看看