UAC即Windows 用户帐户控制级别以及app.manifest清单选项,如何自动以管理员身份运行.NET程序

UAC即Windows 用户帐户控制级别以及app.manifest清单选项requestedExecutionLevel level=“requireAdministrator“ uiAccess=_LongtengGensSupreme博客-CSDN博客

 

UAC即Windows 用户帐户控制级别

UAC是专门控制用户帐户访问控制的,简单说UAC就是控制用户可以访问Windows系统中的中的哪些信息,不可以访问哪些信息以及安装时候UAC(用户账户控制)会根据当前系统的用户账户控制级别提示/不提示运行安装信息

UAC(用户账户控制)设置有2种方式

1、控制面板\用户帐户\用户帐户 选择  更改用户帐户控制设置

 

2、通过程序处理app.manifest清单选项设置requestedExecutionLevel level

     通过程序处理app.manifest清单选项设置requestedExecutionLevel level,

    app.manifest清单选项文件创建有2种方式

         1、项目右键,点击添加文件,找到程序清单文件 创建app.manifest清单文件

 

         2、可以通过  项目右键 选择  属性  安全性  勾选 启用ClickOnce 安全设置(N)  自动生成一个app.manifest清单文件,然后取消勾选 启用ClickOnce 安全设置(N)

 

上述2种方式创建app.manifest清单文件之后需要设置,如下:

 1、如果事想在程序运行的时候拥有管理员权限的话,需要设置requestedExecutionLevel level="requireAdministrator" uiAccess="false",设置以后就可以操作一写需要特殊权限的文件了,如:C:\program files ,C:\program files x86 ,C:\Windows\system32,注册表读写等等

 

 

 2、设置requestedExecutionLevel中的level可以设置需要的权限功能,而uiAccess可以用来做一些其他处理,例如 需要特殊权限的文件的读写,

可以设置requestedExecutionLevel level="requireAdministrator" uiAccess="false",uiAccess也可以设置程序窗体的置顶,

这里的程序置顶可以设置比系统界面更高的置顶,也就是说可以比一些系统级别的置顶还要高,如任务管理器一样绝对置顶

 

 

 效果如下:

 

 

 

新建winform窗体项目,添加app.manifest清单文件之后需要设置 requestedExecutionLevel level="asInvoker" uiAccess="true",

App.Manifest 文件中设置 requestedExecutionLevel level="asInvoker" uiAccess="true"


 

设置窗体的2个属性


 

 

注意:可能遇到的问题

 

 

解决方法是“以管理员权限启动此程序”。

 

 

启动效果如下:

 

原文参考链接:http://blog.walterlv.com/post/run-desktop-application-above-windows-application.html

让你的程序置顶到比系统界面都更上层,就像任务管理器/放大镜一样绝对置顶

 

启动系统自带的放大镜程序,我们会发现即便进了 Windows 8 的开始屏幕,或打开了 Windows 10 的开始菜单和消息中心,它也依然显示在最顶层。如果你为任务管理器开启置顶效果,你会发现它也能显示到开始屏幕的顶层。这是怎么做到的呢?


顺便解释下“桌面应用程序”,指的是传统 Win32 应用程序。解释下“Windows 应用”,指的是开始屏幕/开始菜单/UAP/UWP 甚至是锁屏界面这些。

方法

做到这些,需要四个步骤,缺一不可:

第一步:修改 Manifest

前往你程序的 App.Manifest 文件,设置 requestedExecutionLevel

 
1
<requestedExecutionLevel level="asInvoker" uiAccess="true" />

第二步:修改窗口属性

这两个属性是必须设置的,否则无法达到目的。

 
1
2
ShowInTaskbar=true
TopMost=true

第三步:为程序签名

参见此处 - 为程序签名

第四步:将程序放到受信任的目录下

 
 
C:\program files
C:\program files x86
C:\Windows\system32

可能遇到的问题

从服务器返回了一个参照

A referral was returned from the server.

从服务器返回了一个参照

感谢 胡承 提供的错误和解决方法!

你可能会在按照以上步骤操作后,在执行程序时遇到这样的错误,解决方法是“以管理员权限启动此程序”。


参考资料

How to make Windows 8 desktop apps shown in Metro UI (like Task Manager)?
https://stackoverflow.com/questions/12873323/how-to-make-windows-8-desktop-apps-shown-in-metro-ui-like-task-manager

Code Signing Notes
http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/nftechsupt.web+WinBatch/Manifest+Manifest~Faqs.txt

UIAccess in Manifest Files
https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/4d2e1358-af95-4f4f-b239-68ec7e2525a9/uiaccess-in-manifest-files

Debug Applications with uiAccess Set to “True”
http://blogs.techsmith.com/inside-techsmith/devcorner-debug-uiaccess/

Debugging with uiAccess=true
https://social.msdn.microsoft.com/forums/windowsdesktop/en-us/7a42efab-5ce8-456f-8a58-dfedbc2cefcb/debugging-with-uiaccesstrue

本文会经常更新,请阅读原文: https://blog.walterlv.com/post/run-desktop-application-above-windows-application.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (walter.lv@qq.com) 。

如何自动以管理员身份运行.NET程序

 windows 7和vista提高的系统的安全性,同时需要明确指定“以管理员身份运行”才可赋予被运行软件比较高级的权限,比如访问注册表等。否则,当以普通身份运行的程序需要访问较高级的系统资源时,将会抛出异常。

  如何让程序在启动时,自动要求“管理员”权限了,我们只需要修改app.manifest文件中的配置项即可。

  app.manifest文件默认是不存在的,我们可以通过以下操作来自动添加该文件。

(1)进入项目属性页。

(2)选择“安全性”栏目。

(3)将“启用ClickOnce安全设置”勾选上。

  现在,在Properties目录下就自动生成了app.manifest文件,打开该文件,将trustInfo/security/requestedPrivileges节点的requestedExecutionLevel的level的值修改为requireAdministrator即可。如下所示:

  1. <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
  2. <!-- UAC 清单选项
  3. 如果要更改 Windows 用户帐户控制级别,请用以下节点之一替换
  4. requestedExecutionLevel 节点。
  5. <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 此项默认
  6. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  7. <requestedExecutionLevel level="highestAvailable" uiAccess="false" />
  8. 指定 requestedExecutionLevel 节点将会禁用文件和注册表虚拟化。
  9. 如果要利用文件和注册表虚拟化实现向后
  10. 兼容性,则删除 requestedExecutionLevel 节点。
  11. -->
  12. <!--<requestedExecutionLevel level="asInvoker" uiAccess="false" />-->
  13. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  14. </requestedPrivileges>

  记住,如果不需要ClickOnce,可以回到项目属性页将“启用ClickOnce安全设置”不勾选。   

  接下来,重新编译你的程序就OK了。

 

posted @ 2021-12-21 09:35  CharyGao  阅读(996)  评论(0编辑  收藏  举报