“ClickOnce does not support the request execution level 'requireAdministrator.'”

前端 未结 11 1655
暗喜
暗喜 2020-12-07 15:33

So I was writing an application that requires access to the registry. I had not touched any build settings, wanting to get the thing working before I added the other touches

11条回答
  •  日久生厌
    2020-12-07 16:06

    For those who use uncheck "Enable ClickOnce security settings" can't work, to try the method I find.

    First, leave your app.manifest requestedExecutionLevel item as is:

    
    

    And then you edit your Program.cs file like this:

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

    restruct main method like:

        static void Main()
            {
                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)
                    {
                        // The user did not allow the application to run as administrator
                        MessageBox.Show("Sorry, but I don't seem to be able to start " + 
                           "this program with administrator rights!");
                    }
    
                    // Shut down the current process
                    Application.Exit();
                }
                else
                {
                    // We are running as administrator
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new Form1());
                }
            }
    

    It works on Windows 10 and Visual Studio 2019!

提交回复
热议问题