vs下给生成的程序(exe)加入默认的申请管理员权限

在vs下编程时,经常会用到一些特殊的权限,尤其是管理员权限,下面是在win7下笔者亲测通过的。

下面要分两种情况:

第一种情况就是在vs2003或者以下的编译器中运行

1、准备一个manifest文件,命名如下:XPStyle.manifest

文件的内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<assemblyIdentity 
  version="5.1.0.9" 
  processorArchitecture="X86" 
  name="XPStyle.manifest" 
  type="win32" 
/> 
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
  <security> 
    <requestedPrivileges> 
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> 
    </requestedPrivileges> 
  </security> 
</trustInfo> 
</assembly>

asInvoker : 如果选这个,应用程序就是以当前的权限运行。

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

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

2、然后保存,放到和资源文件(.rc)放到一个目录下

3、用文件编辑器打开上述资源文件,在最后一行加上

1 24 "XPStyle.manifest"

1是资源id,24是资源的名称,必须是1和24

4、然后保存重新编译程序就好了。

这里有个注意事项要说明:就是这样生成的exe文件不能调试运行,只能双击运行,要想用管理员身份的调试,需要让编译器以管理员身份运行同时把资源文件中的添加的那行注释掉就好了。

如果直接点调试运行会造成关不掉你那个程序,用任务管理器也不能关掉。

第二种情况是在vs2005以上的编译器中运行

打开vs2005、vs2008等工程,在【解决方案资源管理器】里查看是否有app.manifest这个文件,如果没有的话,通过以下方法创建:

方法1:

1、在【解决方案资源管理器】右键工程名称选择属性;
2、在弹出的该对话框中,选择【安全性】选项卡。
3、勾选【启用ClickOnce安全设置】,并选中【这是完全可信的应用程序】。
4、保存工程,这时候app.manifest就自动创建了。

 

打开app.manifest把默认的配置修改一下,通过代码的注释,可以知道需要修改的节点是【requestedExecutionLevel】

asInvoker : 如果选这个,应用程序就是以当前的权限运行。

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

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

找到<requestedExecutionLevel  level="asInvoker" uiAccess="false" />
把其改为<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

这时候修改完成,按下F5进行调试,通常会收到如下的错误提示:【ClickOnce 不支持请求执行级别“requireAdministrator”】。

事情好像发生了相互矛盾,上面开启【ClickOnce】便自动创建了app.manifest,现在修改了app.manifest却提示:ClickOnce 不支持请求执行级别“requireAdministrator”。

解决方法是:只要把【启用ClickOnce安全设置】不勾选就可以了。

如果操作步骤正确,按下F5进行调试,会弹出如下的提示框,VS具有提升的权限。

这样我们编写的应用程序在运行后,就会首先弹出这样一个提示框 , 点【Yes】后,程序才可以继续运行,并且获得系统管理员的权限。

方法2:

为工程项目添加一个类,应用程序清单文件(app.manifest)。

然后可以看到app.manifest的位置不在Properties属性里了,变成在引用里了,其节点内容也少了一些。

剩下的方法和上面相同。这样跳过了【启用ClickOnce安全设置】这步,直接执行,不会出错了。

posted @ 2015-10-30 09:40  shmilxu  阅读(6470)  评论(0编辑  收藏  举报