VC 编写 Vista 或 win7 下需要管理员权限运行的程序

Win7运行VC程序UAC权限问题 Win7运行VC程序往往受到UAC权限不够的问题,以下有几个方法获得管理员权限 1、通过代码提升用户权限,代码如下: BOOL UpgradeProcessPrivilege(HANDLE hProcess, LPCTSTR lpPrivilegeName ) {    HANDLE hToken = NULL;    if(OpenProcessToken(hProcess, TOK 阅读详情


程序有 com,需要注册,但是在 win7 上面如果不是管理员权限的话,执行就会失败。

先是通过代码提升用户权限的。代码如下:

BOOL UpgradeProcessPrivilege(HANDLE hProcess, LPCTSTR lpPrivilegeName ) 
{ 
HANDLE hToken = NULL; 
if(OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken)) 
{ 
LUID Luid; 
if(LookupPrivilegeValue(NULL, lpPrivilegeName, &Luid)) 
{ 
TOKEN_PRIVILEGES tp; 
tp.PrivilegeCount = 1; 
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
tp.Privileges[0].Luid = Luid; 
return( AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL) ); 
} 
} 
return FALSE; 
}

 

BOOL UpgradeProcessPrivilege(HANDLE hProcess, LPCTSTR lpPrivilegeName ) 
{ 
HANDLE hToken = NULL; 
if(OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken)) 
{ 
LUID Luid; 
if(LookupPrivilegeValue(NULL, lpPrivilegeName, &Luid)) 
{ 
TOKEN_PRIVILEGES tp; 
tp.PrivilegeCount = 1; 
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
tp.Privileges[0].Luid = Luid; 
return( AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL) ); 
} 
} 
return FALSE; 
} 
// UpgradeProcessPrivilege(GetCurrentProcess(),SE_DEBUG_NAME); 


很奇怪,生成的文件,在桌面上时就没有问题,运行时会提示是否管理员权限,但是拷到其他地方就不行了。无语。于是探索另外的方法了。
找到了一些方法,因我的是vs2005,所以下面方法一是成功的。

方法一:导入 manifest 文件
1.如果你使用的是VC6或者vs2003,,2005,通过导入manifest文件解决

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


注:此文件只要扩展名是.manifest文件名可以任意。文件内容的name属性值也可以为任意。(VC6.0下经过测试)

2.把此文件"import"到资源文件中,资源类型为24,资源ID为1,
注:经测试资源类型必须为24,资源ID也必须为1,

3.重新编辑即可,在windows7下该程序图标有一个盾状小图标,双击运行会出现对话框要求提升为管理员权限。


如果是vs2008或者2010,就比较简单了,直接项目右键---属性---连接器---清单文件---uac执行级别 选择requireAdministrator 重新编译 这样你的程序直接运行就拥有管理员权限了。程序就会出现一个盾牌。

方法二:修改注册表:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files\\win7test2.exe"="RUNASADMIN"


将上面的内容保存为.reg文件,基中把C:\\Program Files\\win7test2.exe改为真实环境的应用程序地址,双击运行即可。
这种方法后应用程序图标不会有盾状图标,但双击运行仍然会弹出对话框要求提升权限。

 

 

注:本文转载自:http://hi.baidu.com/aoedebug/blog/item/0d6c26fc5c700ec2f3d3854d.html


 

 

 

 

 

VC编写vistawin7下需要管理员权限运行程序 ///////////////////// VC编写vistawin7下需要管理员权限运行程序 VC编写vistawin7下需要管理员权限运行程序 程序有com,需要注册,但是在win7上面如果不是管理员权限的话,执行就会失败。 先是通过代码提升用户权限的。代码如下: view plain copy to clipboard BOOL UpgradeProcessP 阅读详情

相关推荐

VC程序提升管理员权限

程序权限不够,应用管理员权限打开程序运行方可。 如何使vc程序运行时请求管理员权限? 如果是2005者2008 就简单了,直接项目右键---属性---连接器---清单文件---uac执行级别 选择requireAdministrator 重新编译 这样你的程序直接运行就拥有管理员权限了。  代码提权 /************************************

天上的猩猩的专栏 4300

编译完成的工程在WIN7VISTA下自动使用管理员权限运行

方法1 Vista/Win7使用UAC加强了权限管理,一些程序需要用户指明管理员权限才能正常运行。那么如何让一个程序默认就是以管理员方式运行呢?答案是Manifest. 步骤如下: 1. 在工程中新建一个文件,例如mani.xml。 其内容为 requireAdministrator" uiAccess="false" /> 蓝色的一

jjchao的专栏 2102

VC程序Win7下获得管理员权限

VC编译出来的应用程序win7vista运行,有可能因为权限问题,不能成功运行。 用下面的办法,给应用程序添加一个manifest文件,程序运行时系统就会跳出UAC对话框,获得管理权限。 1.打开应用程序的源代码工程 2.添加一个“custom”资源,"

十年磨一剑,霜刃未曾试! 1万+

WIN7VISTA下自动使用管理员权限运行

Vista/Win7使用UAC加强了权限管理,一些程序需要用户指明管理员权限才能正常运行。那么如何让一个程序默认就是以管理员方式运行呢?答案是Manifest.步骤如下:1. 在工程中新建一个文件,例如mani.xml。其内容为requireAdministrator" uiAccess="false" />蓝色的一行是关键的。默认是asInvoker。这里改成requireAdministrat

Augusdi的专栏 3154

Delphi在win7/vista下写注册表等需要管理员权限的解决方案

可人家MS也知道自己家的东西烂,编了庞大的MSDN让它的程序员模仿,有如老师亲临,大大给他的用户壮了胆,也给了他们创造了更广阔的想象空间... 扯远了,大家见笑了!以上解决方法并非是非完美的,UAC的提示少给用户带来了不安全的感觉,最好的方法应该由程序本身和用户交互说明需要使用管理员权限运行者自己你像在xp以下系统上一样,自己提高权运行权限,实现一些操作,但这样做并非现实,MS能会让它的辛苦研发出的UAC项目形同虚设?关于UAC的利弊,网络上的说法褒贬不一,在这里就不具体讨论了。

疯流人物 897

VC2005 编译Win7管理员权限启动的可执行程序

由于在VistaWin7系统增加了UAC功能,导致很多程序启动时需要用户以手动点击鼠标右键,选择“以管理员权限启动”来启动应用程序。     为了方便用户,VC程序员可以自己在程序中添加以管理员权限启动的功能,其实非常简单,将以下代码复制到记事本中,保存为.manifest后缀名的文件 <assemblyIdentity version="1.0.0.0" process

baggiowangyu的专栏 4303

VistaWin7上.net程序如何自动使用管理员权限运行

原帖:http://www.cnblogs.com/likewind/archive/2010/10/20/1856604.html   最近项目需要写个小工具,工具需要操作系统目录中的文件,比如:c:\windows目录,者修改注册表,而如果系统是win7运行程序就会抛出目标文件拒绝访问的异常。这是在网上找到的解决办法,特此记下,说不定以后还会用到,记在cnblogs上算是最方便的了:

thebesttome的专栏 1279

VC6 编译程序Vista/win 7上要求管理员权限[转]

<br />Vista 权限检查变得比以往的任何版本windows都严格.<br /> 有相当多程序,在winxp,win2k上顺利运行的.放到Vista上,就无法运行.其中有一类原因是因为程序使用了一些API,这些API在Vista下必须要求满足管理员权限才能够执行.<br /> 具体查新版的MSDN,会有明确的标注.同时Visual Studio 2003,以及 Visual Studio 2005都可以很方便的直接在程序的工程里头加入 manifest 资源,声明程序需要管理员权限.<br />而

lionzl的专栏 817

VC6 在Vista Win7 下提高权限问题

<br />以下程序集清单(Assembly Manifest)示例使你的程序VISTAWIN7下需要管理员权限,即在程序运行时弹出UAC提升权限对话框。<br /><?xml version="1.0" encoding="UTF-8" standalone="yes"?><br /><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><br /><assemblyIdentity<br />    vers

lin_angle的专栏 782

VC6编辑的程序Win7运行时获取管理权限

VC编译出来的应用程序vista/Win7运行,有可能因为权限问题,不能成功运行。 用以下办法,给应用程序添加一个manifest文件,程序运行时系统就会跳出UAC对话框,获得管理权限。 1.打开应用程序的源代码工程 2.添加一个“custom”资源,"resource type"填24,把资源ID改为1,然后把以下内容复制到资源内容中保存 version="1.0.0.0

linfei2707的专栏 929

VISTA WIN7下如何以管理员身份打开程序

<br />遇到win 7权限限制,对c:/program files下的自己的配置文件.ini做修改时,系统会自动复制到c:/users/用户名/AppData/Local/VirtualStore/Program Files/***/***.ini下面,并做修改,然后会自动读取,但是如果以管理员身份运行则不会这样,网上找到用管理员身份打开Exe方法如下:<br /> C/C++ code VC编译出来的应用程序vista运行,有可能因为权限问题,不能成功运行。 用以下办法,给应用程序添加

viviansuda的专栏 1813

自动提升VistaWin7上进程的权限--RT_MANIFEST

很多时候自己开发的应用程序需要以更高的用户权限运行,特别是在VistaWin7下面。 如何使得自己编写的应用程序运行时也如同下面的方式一样,提示权限提升。     方法: 1.按照通常方式,开发VC程序,编译、生成.exe文件; 2.在DebugRelease文件夹下面,新建一个“程序名+.exe+.manifest”的文件。若你生成的应用程序

wowolook的专栏 4154

VC程序自动获取windows7/vista系统管理员权限(vs2008)

再一次开发中,偶然发现利用vc中的流改写文本时候在windows7/vista运行,系统会提示关闭程序.原因为需要启动管理员模式运行程序.解决方法1.右击程序-->以管理员模式运行程序.方法2:打开vs2008选中项目右击-->属性-->配置属性-->连接器-->清单文件-->UAC 执行级别.改成requireAdministrator以上两种方法均可让程序管理员模式启动.但是一些盗版操作系统可能没有管理员模式.还是会有少数盗版系统出现此类问题.本人觉得可以在程序中判断客户端是否有管理员模式,如果有才

hp158832457的专栏 1160
上一篇: VC 一句代码提升进程权限
下一篇: HeapAlloc,GlobalAlloc,LocalAlloc,VirtualAlloc,malloc,new 的异同
DavidHsing
博客等级 码龄19年 781粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值