判断当前进程是否以管理员权限运行(AllocateAndInitializeSid后,用CheckTokenMembership与AdministratorsGroup进行比较,和Delphi的那个例子还有点不一样)

在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下测试没问题

剩下的不解释

http://blog.csdn.net/just_fancy/article/details/6310347

时间: 2024-10-27 04:11:55

判断当前进程是否以管理员权限运行(AllocateAndInitializeSid后,用CheckTokenMembership与AdministratorsGroup进行比较,和Delphi的那个例子还有点不一样)的相关文章

Win7下判断当前进程是否以管理员身份运行

判断当前程序是否以管理员身份运行,代码如下: #include <iostream> #include <windows.h> using namespace std; // 判断当前程序是否以管理员身份运行. bool IsProcessRunAsAdmin() { SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; PSID AdministratorsGroup; BOOL ret= AllocateAn

判断当前进程是否以管理员权限启动的

uses shlobj; type WELL_KNOWN_SID_TYPE = ( WinNullSid, WinWorldSid, WinLocalSid, WinCreatorOwnerSid, WinCreatorGroupSid, WinCreatorOwnerServerSid, WinCreatorGroupServerSid, WinNtAuthoritySid, WinDialupSid, WinNetworkSid, WinBatchSid, WinInteractiveSid

C#程序以管理员权限运行

原文:C#程序以管理员权限运行 C#程序以管理员权限运行 在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也无法对系统目录.系统注册表等可能影响系统正常运行的设置进行写操作.这个机制大大增强了系统的安全性,但对应用程序开发者来说,我们不能强迫用户去关闭UAC,但有时我们开发的应用程序又需要以 Administrator 的方式运行,如何实现这样的功能呢? 下面演示 C# 程

【转】 C#程序以管理员权限运行

C#程序以管理员权限运行在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也无法对系统目录.系统注册表等可能影响系统正常运行的设置进行写操作.这个机制大大增强了系统的安全性,但对应用程序开发者来说,我们不能强迫用户去关闭UAC,但有时我们开发的应用程序又需要以 Administrator 的方式运行,如何实现这样的功能呢? 下面演示 C# 程序如何实现提示用户以管理员权限运行

C#程序以管理员权限运行【我采用了第二种,比较好用】

在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也无法对系统目录.系统注册表等可能影响系统正常运行的设置进行写操作.这个机制大大增强了系统的安全性,但对应用程序开发者来说,我们不能强迫用户去关闭UAC,但有时我们开发的应用程序又需要以 Administrator 的方式运行,如何实现这样的功能呢? 下面演示 C# 程序如何实现提示用户以管理员权限运行. 本例以WinForm

Objective-C MacOS以管理员权限运行程序

在MacOS下很多操作是需要管理员权限的, 比如我们运行chmod,在命令行下可以使用sudo chmod来申请以管理员权限运行.但是使用XCode写的程序是不能使用sudo的. 需要自己写代码来申请权限.下面是一个例子, 以管理员身份运行chmod 777 bool ChmodFileWithElevatedPrivilegesFromLocation(NSString *location) { // Create authorization reference OSStatus status

VS2005 工程在win7下使用管理员权限运行

想关资料 http://stackoverflow.com/questions/13030492/set-administrator-privilege-for-my-c-application-in-vs2005 http://msdn.microsoft.com/en-us/library/bb756929.aspx http://msdn.microsoft.com/en-us/library/ms235591.aspx //================================

【转】vc++MCF/C++/C中怎样让应用程序获得或以管理员权限运行 ,ShellExecuteEX编程 --- 获取管理员权限

ShellExecuteEX编程 --- 获取管理员权限:http://blog.csdn.net/jhui163/article/details/5873027 怎样让你的应用程序获得管理员权限:就是在运行开发工具如vc6.0 或vs2010时,要以管理员身份运行,这样你的应用程序才可以继承 http://bbs.csdn.NET/topics/390262991 解决:在vs2010等开发工具中虽然以管理员身份编译运行了程序,可以获得管理员权限,但是当单独点击Debug或release版时,

Powershell管理系列(三十五)PowerShell操作之以管理员权限运行脚本

-----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微软产品实施及外包,QQ:185426445.电话18666943750 场景:Win10或者是非管理员权限运行命令行的时候,提示无权限,如下图 我们可以右键Powershell,以管理员权限运行,或者是计划任务设置为以管理员权限运行,其实我们有更加高效的办法,可以直接提权运行脚本,如下图,输入用户名和密码, Invoke-Command -ScriptBlock {ipconfig /register