近期做一个NOD32的Key程序时,在win7遇到一个管理员权限的问题,就是很多时候在WIN7无法修改注册,使得我程序不能实现相应目的,最终还是在百度帮助下做完成了,现在把我解决的方法与大家交流一下。
正文:
现在已经是一个小部分WIN7与大部分XP共存的世界,但为了这小部分考虑win7情况也是不可避免的问题。
很多网友怀疑win7下VB有问题,按目前我自己使用情况32位旗舰版下,完成没有任何问题,还包括众多插件也是没有任何问题,只有一些用到了必须用到管理员权限东西时就比XP多一点,这一类程序必须右键以管理员才能正确运行,很多用户他们根本不会做这一点,所以使得这一类程序出现不同问题,如不能修改注册表的特殊项了等等。
参考了一下网上,发现大部分是关delphi、c++的内容,
综合了这方面内容,与以前XP模式的内容,得出怎样VB怎样在WIN7以管理员运行且单文件化无控件化(当然你带不介意带一个manifest文件,那就只要完成第一步就完成了!)。
一、首先参考(http://msdn.microsoft.com/en-us/library/bb756929.aspx)建立一个manifest文件
我做法就是:
1、新建一个文本文件。
2、写入以下内容:
<?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="IsUserAdmin"
type="win32"/>
<description>Description of your application</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
3、另存为一个与你程序名称(包括Exe后缀)相同manifest文件,如:abc.exe.manifest 。
二、做一个资源文件名为类型为“24”的资源文件。
我的做法参考以前“XP界面”方法,有二种如下:
两种方法都必须建一个RC文件,方法:新建一个文本,写入“1 24 abc.exe.manifest”双引号里面的 内容(当然abc.exe.manifest得与你第一制作的manifest文件相同名字),另存为一个任意名的RC文件,如:ABC.rc
第一种就是你有VC的用vc打开RC文件,之后另为RES文件就OK了。
第二种就是纯VB人员了,就得用VB自带的(不排除一些绿色版也没有这个文件!)方法:打开CMD,进入VB安装目录的Wizard文件夹(如:cd C:/Program Files/Microsoft Visual Studio/VB98/Wizards 之后回车),再输入 “rc /r 你的RC文件路径”(如:rc /r e:/vb/win.rc),得到的资源文件,通过VB资源管辑器导入后编译你的程序就完成了。
三、当然在win7试一下效果。我的是OK,就不知大家怎样。
注:当然你在WIN7是登录时有管理员权限的,这个方法不是强行提高权限,只是为用户省下右键点管理员权限而已。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT/*/shell/runas]
@="获取管理员权限"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT/*/shell/runas/command]
@="cmd.exe /c takeown /f /"%1/" && icacls /"%1/" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f /"%1/" && icacls /"%1/" /grant administrators:F"
[HKEY_CLASSES_ROOT/exefile/shell/runas2]
@="获取管理员权限"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT/exefile/shell/runas2/command]
@="cmd.exe /c takeown /f /"%1/" && icacls /"%1/" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f /"%1/" && icacls /"%1/" /grant administrators:F"
[HKEY_CLASSES_ROOT/Directory/shell/runas]
@="获取管理员权限"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT/Directory/shell/runas/command]
@="cmd.exe /c takeown /f /"%1/" /r /d y && icacls /"%1/" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f /"%1/" /r /d y && icacls /"%1/" /grant administrators:F /t"