原文地址:https://blog.csdn.net/qq395537505/article/details/51010962

参考UAC:User Account Control

参考IE保护模式:https://blog.csdn.net/xt_xiaotian/article/details/5336809

打开VS2005、VS2008、VS2010、VS2012、VS2013、VS2015工程,查看工程文件夹中的Properties文件夹下是否有app.manifest这个文件;如没有,按如下方式创建:鼠标右击工程在菜单中选择“属性”,点击工程属性的“安全性”标签,在安全性标签页中勾选“启用ClickOnce安全设置”,并选择“这是完全可信的应用程序”,保存工程,此时在Properties下已经自动生成了app.manifest文件。

将默认的app.manifest文件修改为

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  3. <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  4. <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  5. <security>
  6. <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
  7. <!-- UAC 清单选项
  8. 如果要更改 Windows 用户帐户控制级别,请用以下节点之一替换
  9. requestedExecutionLevel 节点。
  10. <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
  11. <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
  12. <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
  13. 指定 requestedExecutionLevel 节点将会禁用文件和注册表虚拟化。
  14. 如果要利用文件和注册表虚拟化实现向后
  15. 兼容性,则删除 requestedExecutionLevel 节点。
  16. -->
  17. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  18. </requestedPrivileges>
  19. </security>
  20. </trustInfo>
  21. <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
  22. <application>
  23. <!-- 此应用程序设计使用的所有 Windows 版本的列表。Windows 将会自动选择最兼容的环境。-->
  24. <!-- 如果应用程序设计使用 Windows 7,请取消注释以下 supportedOS 节点-->
  25. <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
  26. </application>
  27. </compatibility>
  28. <!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) -->
  29. <!-- <dependency>
  30. <dependentAssembly>
  31. <assemblyIdentity
  32. type="win32"
  33. name="Microsoft.Windows.Common-Controls"
  34. version="6.0.0.0"
  35. processorArchitecture="*"
  36. publicKeyToken="6595b64144ccf1df"
  37. language="*"
  38. />
  39. </dependentAssembly>
  40. </dependency>-->
  41. </asmv1:assembly>

修改<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />节点即可。

配置文件修改后,我们运行应用程序,就会首先弹出这样一个提示框,点 Yes 后,程序才可以继续运行。

顺便说下,还可以通过一个方法了解到此时程序运行是不是管理员权限:

  1. public bool IsAdministrator()
  2. {
  3. WindowsIdentity identity = WindowsIdentity.GetCurrent();
  4. WindowsPrincipal principal = new WindowsPrincipal(identity);
  5. return principal.IsInRole(WindowsBuiltInRole.Administrator);
  6. }

对于XML文件中引用的UAC执行权限级别,分别代表下列含义:

asInvoker : 应用程序就是以当前的权限运行。

highestAvailable: 这个是以当前用户可以获得的最高权限运行。

requireAdministrator: 这个是仅以系统管理员权限运行。

默认情况下是 asInvoker。

highestAvailable 和 requireAdministrator 这两个选项都可以提示用户获取系统管理员权限。那么这两个选项的区别在哪里呢?

他们的区别在于,如果我们不是以管理员帐号登录,那么如果应用程序设置为 requireAdministrator ,那么应用程序就直接运行失败,无法启动。而如果设置为 highestAvailable,则应用程序可以运行成功,但是是以当前帐号的权限运行而不是系统管理员权限运行。如果我们希望程序在非管理员帐号登录时也可以运行(这种情况下应该某些功能受限制) ,那么建议采用 highestAvailable 来配置。

C#项目中引入app.manifest管理员权限运行的更多相关文章

  1. vs2005 ,2008,2010中引入app.manifest(即c#程序在win7下以管理员权限运行方法)

    打开VS2005.VS2008.VS2010工程,查看工程文件夹中的Properties文件夹下是否有app.manifest这个文件:如没有,按如下方式创建:鼠标右击工程在菜单中选择“属性”,点击工 ...

  2. win8中 cmd直接以管理员权限运行

    一.组合键 WIN+X   二.锁定到任务栏,方便以后快速启动     三.控制面板->控制中心     四.更改用户账户控制设置--调到最低 好了,点击任务栏的命令提示符

  3. 在Android项目中引入MuPdf

    由于公司手机App要加入一个附件查看功能,需要查看PDF文件,在网上找了许多第三方工具,最后选择了MuPDF. 更多第三方工具可以查看大神总结的:http://www.cnblogs.com/poke ...

  4. 【转】vc++MCF/C++/C中怎样让应用程序获得或以管理员权限运行 ,ShellExecuteEX编程 --- 获取管理员权限

    ShellExecuteEX编程 --- 获取管理员权限:http://blog.csdn.net/jhui163/article/details/5873027 怎样让你的应用程序获得管理员权限:就 ...

  5. vue-cli项目中引入第三方插件

    前言 最近有小伙伴问道如何在vue-cli项目中引入第三方插件或者库,例如如果想在项目中使用jQuery中的Ajax请求数据呢?或者我想使用Bootstrap框架呢?等等这些问题,本篇博客将带你学习如 ...

  6. bat代码中判断 bat是否是以管理员权限运行,以及自动以管理员权限运行CMD BAT

    · bat 代码中判断bat是否是以管理员权限运行,以及自动以管理员权限运行CMD BAT 一.判断bat是否是以管理员权限运行 @echo off net.exe session >NUL & ...

  7. 如何在项目中引入 #include .h、.lib、 .dll、.cpp (转)

    源:http://blog.csdn.net/vippolka/article/details/8552735 在项目中引入.h..lib和dll.以及.cpp 1..h的引入 解决办法1:把  XX ...

  8. 如何在项目中引入MetaQ消息收发机制

    当需要异步发送和接收大量消息时,需要在Crystal项目中引入MetaQ消息收发机制. 关于MetaQ使用的官方例子可参考:https://github.com/killme2008/Metamorp ...

  9. eclipse项目中引入shiro-freemarker-tags会jar包冲突

    maven项目中引入了这个依赖. <dependency> <groupId>net.mingsoft</groupId> <artifactId>sh ...

随机推荐

  1. [Javascript] Check both prop exists and value is valid

    Sometime you need to check one prop exists on the object and value should not be ´null´ or ´undefine ...

  2. 比特币 Bitcoin 是什么,我勒个去,哈耶克果然超前——货币的非国有化,容我思量一下【转载+整理】

    原文地址 比特币矿业史(上):故事的开始,CPU 时代 比特币矿业史(中):群众的觉醒 ,GPU 时代 比特币矿业史(下):巨头的诞生 ,ASIC 时代 本文内容 引子 0 序 1 故事的开始 : C ...

  3. iOS NSNotificationCenter 最基本使用

    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:] , @"a ...

  4. Asp.Net下通过切换CSS换皮肤

    直接重写Render事件 protected override void Render(System.Web.UI.HtmlTextWriter writer) { StringWriter sw = ...

  5. 【树莓派】Squid代理以及白名单配置

    Squid安装: sudo apt-get install squid3 -y 首先,建议备份一下这个配置文件,以免配错之后,无法恢复,又得重新安装: sudo cp /etc/squid3/squi ...

  6. mule学习笔记

    mule学习笔记 1.安装&配置 版本:mule 2.2.1 操作: 1) 下载.解压 2)配置环境变量:MULE_HOME.PATH 3)如果网络环境使用代理,找到%MULE_HOME%/c ...

  7. Flash Actionscript 多线程Worker 压缩图片

    package { import flash.display.Bitmap; import flash.display.Sprite; import flash.events.Event; impor ...

  8. Windows Live Writer离线写CSDN博客

    初始化配置 http://blog.csdn.net/csdnproduct/article/details/27504397 代码着色功能插件: http://www.cnblogs.com/cmt ...

  9. POJ--2406Power Strings+KMP求字符串最小周期

    题目链接:点击进入 事实上就是KMP算法next数组的简单应用.假设我们设这个字符串的最小周期为x 长度为len,那么由next数组的意义,我们知道len-next[len]的值就会等于x.这就是这个 ...

  10. python之docstrinigs

    # -*- coding: cp936 -*- #python 27 #xiaodeng #docstrinigs #文档字符串惯例 ''' 1.多行字符串 2.首行以大写字母开始,以句号结束 3.第 ...