|
|
在开发NBCompressor2.0的时候,因为有自己定义的项目文件扩展名.nbcp,要进行注册表关联,改动了注册表的HKEY_CLASSES_ROOT根节点(操作这个要管理员权限),所以新的问题就如何让程序提示以管理员方式运行。
这个问题我还是纠结了很久,看了一下VC源码,一头雾水,于是在aardio“范例”找到新大陆——获取物理序列号。 我理解这个,可能要获取到序列号,必须以管理员身份才能获取到。
以获取物理序列号这种方式判断是否以管理员方式运行的程序,个人不能确保100%有效(但Win8确实是这样的,有效啊!)。其中还要判断是否是 Windows Vista以后的操作系统,以前的XP/2003这些是不需要的。用现成最少的代码完成最好的目标,何乐而不为呢? 源码如下。
/*
* 检查是否是以管理员方式运行
* @access public
* @return bool
*/
isRunAS = function(){
import win.version;
if (win.version.platformId == 2) {
if (win.version.majorVersion > 5) { //判断是win Vista系统后的操作系统版本
import sys.hd;
var hdinfo = sys.hd.getInfo();
if (hdinfo.sSerialNumber == null) {
return false;
} else {
return true;
}
} else {
return true;
}
} else {
return true;
}
}
if else 这些木有简化的, 目的是让更多人理解判断流程。 希望对有需求的人有帮助。
附注:aardio最新版本标准库已提供 process.admin.isRunAs() 用于
判断进程是否以管理方式运行,下面是示例代码:- import console;
- import process.admin;
- var isAdmin,isXp = process.admin.isRunAs()
- console.log("是否Vista,WIN7,WIN8 管理员权限",isAdmin)
- console.log("是否XP操作系统",!!isXp)
复制代码 |
|