判断当前进程是否以管理员权限运行
2011-04-08 18:27
645 查看
在Win7下(Vista以上的...)有时某些操作就是会让人郁闷
开启了UAC的话,得以管理员权限运行才不会出现Access is denied。。。
但是,程序又不是非得什么时候都用那破管理员权限的
总不能在manifest里加权限,然后用户运行时老弹确认吧?
当然啦,可以将需要管理员权限的部分写到另一个小程序,需要时调用它就行了
不过还是不爽,如果是一个小小的程序还要再加另一个小小小程序的话
那好,干脆判断是不是Win7。。。开启了UAC没有之类
开启的话再判断下是不是以管理员权限运行,不是则提示下用户下面的操作需管理员权限
。。。。
貌似这样还勉强可以
上代码吧,啰嗦了那么多
bool
IsProcessRunAsAdmin()
{
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
BOOL
b = AllocateAndInitializeSid(
&NtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&AdministratorsGroup);
if
(b)
{
CheckTokenMembership(NULL, AdministratorsGroup, &b);
FreeSid(AdministratorsGroup);
}
return
b == TRUE
;
}
几乎完全是COPY MSDN上的例子了,
在Win7下测试没问题
剩下的不解释
开启了UAC的话,得以管理员权限运行才不会出现Access is denied。。。
但是,程序又不是非得什么时候都用那破管理员权限的
总不能在manifest里加权限,然后用户运行时老弹确认吧?
当然啦,可以将需要管理员权限的部分写到另一个小程序,需要时调用它就行了
不过还是不爽,如果是一个小小的程序还要再加另一个小小小程序的话
那好,干脆判断是不是Win7。。。开启了UAC没有之类
开启的话再判断下是不是以管理员权限运行,不是则提示下用户下面的操作需管理员权限
。。。。
貌似这样还勉强可以
上代码吧,啰嗦了那么多
bool
IsProcessRunAsAdmin()
{
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
BOOL
b = AllocateAndInitializeSid(
&NtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&AdministratorsGroup);
if
(b)
{
CheckTokenMembership(NULL, AdministratorsGroup, &b);
FreeSid(AdministratorsGroup);
}
return
b == TRUE
;
}
几乎完全是COPY MSDN上的例子了,
在Win7下测试没问题
剩下的不解释
相关文章推荐
- 判断当前进程是否以管理员权限运行(AllocateAndInitializeSid后,用CheckTokenMembership与AdministratorsGroup进行比较,和Delphi的那个例子还有点不一样)
- 判断当前进程是否"以管理员身份运行"的
- 判断进程是否以管理员权限运行
- 判断当前进程是否以管理员权限启动的
- 判断当前进程是否"以管理员身份运行"的
- 判断当前进程是否以管理员程序运行的方法
- 判断进程是否以管理员权限运行
- 判断当前进程是否"以管理员身份运行"的
- VC 判断进程是否是以管理员权限运行,并且判断是否是用户进程而非服务进程
- 判断当前进程是否以管理员权限启动的
- 判断当前进程是否"以管理员身份运行"的
- vc 判断当前用户是否在管理员组以及是否SYSTEM权限运行
- C# WinForm判断程序是否以管理员身份运行,UAC权限的提权与降权
- 获取提升类型和判断进程是否以管理员身份运行
- C#:判断当前程序是否通过管理员运行
- C#判断当前程序是否通过管理员运行的方法
- 用户是否是用管理员权限运行本进程
- 判断进程是否"以管理员身份运行"
- 判断程序是否运行在管理员权限下
- 判断是否已经以管理员权限运行