解决clickonce不支持administer权限问题

Posted 博子的资料库

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决clickonce不支持administer权限问题相关的知识,希望对你有一定的参考价值。

     转自ClickOnce deployment vs. requestedExecutionLevel = requireAdministrator

     ClickOnce方式部署应用简单方便,估计很多人都用过,但这种方式存在一定的“缺陷”,即以管理员方式启动应用的问题,虽然出于安全考虑可以理解,但给需要管理员权限才能正常运行的程序带来了一定的麻烦,这导致部分人员放弃了ClickOnce发布。

     经过查找相关资料,发现还是有办法解决这个问题的,具体操作如下:

     1、保留manifest文件不变。

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

     2、然后编辑Program.cs文件如下:

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

namespace MyProgramNamespace
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        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());
            }
        }
    }
}  

    也可参考《以管理员身份启动ClickOnce部署的应用程序》,不过该文章方法我没有调试成功,主要是我C#基础不行。

    开机自启动解决权限问题,也可参考《VS编写程序主动要求系统管理员权限(UAC控制)》和《Win7如何提升为管理员权限,如何开机启动需要管理员权限的程序,解决Win7开机不能自动运行的问题等

以上是关于解决clickonce不支持administer权限问题的主要内容,如果未能解决你的问题,请参考以下文章

“ClickOnce 不支持请求执行级别‘requireAdministrator’。”

[ClickOnce] - Win10 管理员模式下无法安装 ClickOnce 之解决

win7打开某个软件提示“clickonce已停止工作”怎么解决

从 Windows 10 运行时,ClickOnce 不会取消注册/重新注册 VSTO 解决方案

如何使用 ConfigurationManager 通过 ClickOnce 更新持久化 app.config?

一种ClickOnce应用程序在Windows7上安装时发生错误的解决办法