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

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

1、修改 manifest 文件

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

经测试,如果应用程序没有 manifest 文件的,可以不用添加 app.manifest 文件,ClickOnce发布后会生成如下格式的 manifest  文件:主程序文件名命名.manifest (例如:Mytest.exe.manifest)

自动生成的 manifest 文件中 requestedExecutionLevel 配置与上述一致。

但以上不排除是个例,如果不配置此项出现异常时可考虑增加此设置。

2、修改程序主函数(即“应用程序的主入口点”,例如: Program.cs 中的 Main 函数)

using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
using System.Windows.Forms; namespace MyTest
{
static class Program
{
[STAThread]
static void Main()
{
Action run = () =>
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
};
WindowsIdentity wi = WindowsIdentity.GetCurrent();
bool runAsAdmin = wi != null && new WindowsPrincipal(wi).IsInRole(WindowsBuiltInRole.Administrator);
if (!runAsAdmin)
{
try
{
//不可能以管理员方式直接启动一个 ClickOnce 部署的应用程序,所以尝试以管理员方式启动一个新的进程
Process.Start(new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase) { UseShellExecute = true, Verb = "runas" });
}
catch (Exception ex)
{
MessageBox.Show(string.Format("以管理员方式启动失败,将尝试以普通方式启动!{0}{1}", Environment.NewLine, ex), "出错啦!", MessageBoxButtons.OK, MessageBoxIcon.Error);
run();//以管理员方式启动失败,则尝试普通方式启动
}
Application.Exit();
}
else
{
run();
}
}
}
}

原文地址:http://www.codeproject.com/Tips/627850/ClickOnce-deployment-vs-requestedExecutionLevel-eq

以管理员身份启动ClickOnce部署的应用程序的更多相关文章

  1. .net 创建计划任务开机后自动以管理员身份启动运行 win7 ~ win10

    假如要启动 this.exe.以下逻辑中会启动先后关联启动三个实例分别是ABC.先启动第一个实例A,A启动实例B,B启动实例C. 要求: 1.如果没有以管理员权限运行,则请求管理员权限运行,即使没有请 ...

  2. Win8下,以管理员身份启动VS项目

    之前一直是先以管理员身份启动VS,然后再打开项目的,比较麻烦,找了好久,总算有一个处理方案了 在Windows7下 通常使用修改属性的方式:在任意快捷方式上右击,选择属性,选择高级,选择以管理员身份启 ...

  3. win10中以管理员身份启动notepad、cmd、editplus

    win10中以管理员身份启动notepad.cmd 在开始菜单中输入,出现了之后再进行右键点击,选择管理员身份运行: 而且editplus也可以“管理员身份运行”,再也不用担心我改不了hosts了: ...

  4. 为通过ClickOnce部署的应用程序进行数字签名

    为通过ClickOnce部署的应用程序进行数字签名 ClickOnce是.NET用于Windows应用程序的一种便捷部署方式.不过由于便捷,导致缺少自定义操作的空间.比如需要对通过ClickOnce部 ...

  5. 获取使用ClickOnce部署的应用程序的版本号

    引子 在编写使用ClickOnce部署的应用程序时,需要在程序的标题栏.软件变更记录.软件关于等页面读取显示当前的版本号. 之前很傻瓜的做法就是在Resource中维护一个string值,在使用到的地 ...

  6. 绕过UAC以管理员身份启动程序

    写这篇文章主要是看到了:http://www.7tutorials.com/use-task-scheduler-launch-programs-without-uac-prompts文章中所用到的方 ...

  7. 让visual studio总是以管理员身份启动

    环境 win10 visual studio 2019 步骤 找到visual studio的安装目录 怎么找? 右击win10开始菜单中visual studio的快捷方式, 依次选择 更多-> ...

  8. Win10以管理员身份启动cmd.exe

    PowerShell -windowstyle hidden -Command "Start-Process cmd.exe -ArgumentList '/s,/k, pushd' -Ve ...

  9. windows下 管理员身份启动java进程

    http://blog.csdn.net/zhuyijian135757/article/details/38234757

随机推荐

  1. 开发安全的Web程序

    目录0x1:什么是安全的Web应用程序0x2:过滤输入的数据0x3:转义输出的数据0x4:Register Globals0x5:magic_quotes_gpc0x6:错误信息的报告0x7:文件的安 ...

  2. jquery script

    http://tech.it168.com/a2012/0206/1307/000001307783_all.shtml http://blog.csdn.net/lyatzhongkong/arti ...

  3. POJ 3349 Snowflake Snow Snowflakes(哈希)

    http://poj.org/problem?id=3349 题意 :分别给你n片雪花的六个角的长度,让你比较一下这n个雪花有没有相同的. 思路:一开始以为把每一个雪花的六个角的长度sort一下,然后 ...

  4. Java二维数组

    package com.test; public class Test { public static void main(String[] args) { // TODO Auto-generate ...

  5. JavaScript中的自调用函数

    自调用函数 自调用函数(self-invoking funciton)就是函数定义完之后会立即运行的函数. 最常见的写法是: (function() { // function body... }() ...

  6. 函数 xdes_get_state

    得到XDES Entry中状态 /**********************************************************************//** Gets the ...

  7. 修饰模式(Decorator结构型)C#简单例子

    修饰模式(Decorator结构型)C#简单例子 玩家基本功能是移动.运行等等.BaseAbility新增加功能:1.伤害技能harmAbility:2.阻碍技能BaulkAbility:3.辅助技能 ...

  8. wildfly-9.0.2 web项目部署详细步骤

    一.配置操作系统环境变量 JAVA_HOME = C:\Program Files (x86)\Java\jdk1.7.0_67 JBOSS_HOME = F:\server\wildfly-9.0. ...

  9. 【转】Eclipse提示No java virtual machine(转载)

    原文网址:http://blog.sina.com.cn/s/blog_6cd73dfb01013zkg.html 第一次运行Eclipse,经常会提示下面的问题:... No java virtua ...

  10. Error:Could not open initscript class cache for initialization script 'C:\Users\Avishek\AppData\Local\Temp\asLocalRepo14.gradle' (C:\Users\Avishek.gradle\caches\2.2.1\scripts\asLocalRepo14_dkwbdtenxxg

    Error:Could not open initscript class cache for initialization script 见鬼 Android Studio打开项目时遇到这个问题 昨 ...