1月15th

C#编写的程序自动以管理员身份运行

DIY编程技术我来说两句!

在Vista或Win7或Win8或Win10系统上exe程序默认不是以管理员身份运行的,它会被UAC(用户帐户控制)阻止访问系统某些功能,如修改注册表操作、操作硬盘上的文件等。但是有时我们确实需要程序在开始运行时就是以管理员身份运行的,这时我们在VS中需进行以下操作:
(1)在要编译的项目上右击选择【属性】然后选择【安全性】再勾选上【启用ClickOnce安全设置】,此时会在解决方案资源管理器的Properties中生成app.manifest文件

(2)双击打开生成的app.manifest文件,找到如下代码:<requestedexecutionlevel level="asInvoker" uiaccess="false">

将其修改为:<requestedexecutionlevel level="requireAdministrator" uiaccess="false"></requestedexecutionlevel>

</requestedexecutionlevel>

(3)然后在【安全性】中去掉对【启用ClickOnce安全设置】的勾选,全部保存后重新编译就可以了。

我们可以看到这个配置中有一个requestedExecutionLevel项,这个项用于配置当前应用请求的执行权限级别。这个项有3个值可供选择,如下所示:
asInvoker : 如果选这个,应用程序就是以当前的权限运行。
highestAvailable: 这个是以当前用户可以获得的最高权限运行。
requireAdministrator: 这个是仅以系统管理员权限运行。默认情况下是 asInvoker。
highestAvailable 和 requireAdministrator 这两个选项都可以提示用户获取系统管理员权限。那么这两个选项的区别在哪里呢?
他们的区别在于,如果我们不是以管理员帐号登录,那么如果应用程序设置为 requireAdministrator
,那么应用程序就直接运行失败,无法启动。而如果设置为 highestAvailable,则应用程序可以运行成功,但是是以当前帐号的权限运行而不是系统管理员权限运行。如果我们希望程序在非管理员帐号登录时也可以运行(这种情况下应该某些功能受限制) ,那么建议采用 highestAvailable 来配置。

本文出自:DIY博客园,链接:https://www.diybloghome.com/prology/2336.html,转载请注明!