好了,开始结贴,谢谢Morgion大神的指导,总结一下,设置成任意文件名带盾的步骤
1.先建立一个xxx.exe.manifest的文件,并把下面的内容复制到这个文件内,里面的
level="requireAdministrator",这句话就是请求管理员权限
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
2.正常编译文件, 编译之后exe会出现带盾图标,但是把exe复制到别的文件夹,盾就没有了,那是因为xxx.exe.manifest没有复制过去,好像系统是先根据那个manifest文件的内容确定exe该怎么执行,具体的google去吧
3.把xxx.exe.manifest嵌入到文件内的方法
在编译之后使用mt命令,把xxx.exe.manifest嵌入到exe文件
mt.exe -manifest "Foobar.exe.manifest" -outputresource:"Foobar.exe"
如果是DLL
mt.exe -manifest "Foobar.dll.manifest" -outputresource:"Foobar.dll"
mt.exe, masm32 里没有,需要去vc里找,我在附件中,打包了
我是直接把这句写进makefile里面了
MANIFEST = $(EXE).manifest
$(EXE): $(OBJ)
link $(LINK) $** && mt -manifest $(MANIFEST) /outputresource:$(EXE)
这样子编译之后的exe,就不再需要manifest那个文件了,拷贝到哪都是带盾的
参考资料;http://www.codeproject.com/Articles/17968/Making-Your-Application-UAC-Aware
感谢大家的帮忙,特别感谢Morgion