如何代码设置以管理员身份启动程序

转载 2016年01月07日 11:14:51


将UAC级别设置为图中所示就可在工程生成的程序启动时自动请求获得管理员权限


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


【转】http://blog.csdn.net/abcpanpeng/article/details/4953529

三个给进程提权的方法

 

方法一:

C/C++ code
bool EnableDebugPrivilege() { HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { return FALSE; } if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue)) { CloseHandle(hToken); return false; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL)) { CloseHandle(hToken); return false; } return true; }




方法二:

C/C++ code
bool UpPrivilege() { HANDLE hToken; // handle to process token TOKEN_PRIVILEGES tkp; // pointer to token structure bool result = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken); if(!result) //打开进程错误 return result; result = LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid); if(!result) //查看进程权限错误 return result; tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; result = AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL); return result; }



方法三:

C/C++ code
#define SE_CREATE_TOKEN_NAME              TEXT("SeCreateTokenPrivilege")
#define SE_ASSIGNPRIMARYTOKEN_NAME        TEXT("SeAssignPrimaryTokenPrivilege")
#define SE_LOCK_MEMORY_NAME               TEXT("SeLockMemoryPrivilege")
#define SE_INCREASE_QUOTA_NAME            TEXT("SeIncreaseQuotaPrivilege")
#define SE_UNSOLICITED_INPUT_NAME         TEXT("SeUnsolicitedInputPrivilege")
#define SE_MACHINE_ACCOUNT_NAME           TEXT("SeMachineAccountPrivilege")
#define SE_TCB_NAME                       TEXT("SeTcbPrivilege")
#define SE_SECURITY_NAME                  TEXT("SeSecurityPrivilege")
#define SE_TAKE_OWNERSHIP_NAME            TEXT("SeTakeOwnershipPrivilege")
#define SE_LOAD_DRIVER_NAME               TEXT("SeLoadDriverPrivilege")
#define SE_SYSTEM_PROFILE_NAME            TEXT("SeSystemProfilePrivilege")
#define SE_SYSTEMTIME_NAME                TEXT("SeSystemtimePrivilege")
#define SE_PROF_SINGLE_PROCESS_NAME       TEXT("SeProfileSingleProcessPrivilege")
#define SE_INC_BASE_PRIORITY_NAME         TEXT("SeIncreaseBasePriorityPrivilege")
#define SE_CREATE_PAGEFILE_NAME           TEXT("SeCreatePagefilePrivilege")
#define SE_CREATE_PERMANENT_NAME          TEXT("SeCreatePermanentPrivilege")
#define SE_BACKUP_NAME                    TEXT("SeBackupPrivilege")
#define SE_RESTORE_NAME                   TEXT("SeRestorePrivilege")
#define SE_SHUTDOWN_NAME                  TEXT("SeShutdownPrivilege")
#define SE_DEBUG_NAME                     TEXT("SeDebugPrivilege")
#define SE_AUDIT_NAME                     TEXT("SeAuditPrivilege")
#define SE_SYSTEM_ENVIRONMENT_NAME        TEXT("SeSystemEnvironmentPrivilege")
#define SE_CHANGE_NOTIFY_NAME             TEXT("SeChangeNotifyPrivilege")
#define SE_REMOTE_SHUTDOWN_NAME           TEXT("SeRemoteShutdownPrivilege")
#define SE_UNDOCK_NAME                    TEXT("SeUndockPrivilege")
#define SE_SYNC_AGENT_NAME                TEXT("SeSyncAgentPrivilege")
#define SE_ENABLE_DELEGATION_NAME         TEXT("SeEnableDelegationPrivilege")
#define SE_MANAGE_VOLUME_NAME             TEXT("SeManageVolumePrivilege")

BOOL EnablePrivilege(LPCTSTR lpszPrivilegeName,BOOL bEnable)
{
    HANDLE hToken;
    TOKEN_PRIVILEGES tp;
    LUID luid;
    
    if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES |
        TOKEN_QUERY | TOKEN_READ,&hToken))
        return FALSE;
    if(!LookupPrivilegeValue(NULL, lpszPrivilegeName, &luid))
        return TRUE;
    
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    tp.Privileges[0].Attributes = (bEnable) ? SE_PRIVILEGE_ENABLED : 0;
    
    AdjustTokenPrivileges(hToken,FALSE,&tp,NULL,NULL,NULL);
    
    CloseHandle(hToken);
    
    return (GetLastError() == ERROR_SUCCESS);
    
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


【转】http://feng06.blog.163.com/blog/static/13501502014102385528860/

在vista以后的windows版本中,有些时候需要提升编译后生成程序的权限,即希望让生成的程序以管理员身份运行。虽然在一般情况下,可以使用鼠标右键选择的方式来强行以管理员身份运行,但它并没有屏蔽普通运行方式,而且普通人通常也不会使用右键选择以管理员身份运行,所以必须在生成程序时就限定程序只能以管理员方式来运行。以下以C++builder为例来说明一下具体方法。

先简单说一下,在vista以后的windows版本中,微软引入了UAC机制,它的目的是防止程序对操作系统本身进行恶意篡改。要让程序以管理员身份运行,就需要在程序中引入UAC标注,也即让程序显示“UAC盾牌”。

Windows7 自动“以管理员身份运行”某程序

自从 VirtualBox 设置了共享目录之后,必须以管理员身份运行才能使用软链接功能。每次开机之后,习惯性双击VirtualBox启动它,等进了系统之后发现git命令不能使用,才想起没有以管理员身份...
  • ganshuyu
  • ganshuyu
  • 2015年03月26日 11:41
  • 3166

c# 设置以管理员身份运行开发的软件 visual studio 2017

用C#开发的软件需要获得管理员权限对C盘文件进行更改。此文更改C#的manifest文件以达到双击运行开发出的软件时提示以管理员身份运行的效果。 1.创建manifest文件。 右击项目-> ...
  • dreamdonghui
  • dreamdonghui
  • 2017年12月25日 21:12
  • 163

让程序自动以管理员身份运行

using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security...
  • jiangxinyu
  • jiangxinyu
  • 2010年03月24日 10:15
  • 5290

vc程序以管理员权限运行方法

由于刚刚做的小程序需要使用管理员权限运行, 方法一: 1找到VS2010的快捷方式:右击——“打开文件位置” 找到VS2010的启动项目devenv.exe:右击——属性——兼容性——特权等级,...
  • Blaider
  • Blaider
  • 2014年07月04日 11:48
  • 4856

在VS中如何让C#语言编写的程序自动以管理员身份运行

在Vista或Win7或Win8或Win10系统上exe程序默认不是以管理员身份运行的,它会被UAC(用户帐户控制)阻止访问系统某些功能,如修改注册表操作、操作硬盘上的文件等。但是有时我们确实需要程序...
  • songyi160
  • songyi160
  • 2015年11月19日 13:29
  • 1474

【C#】如何使程序以管理员身份运行

在部分win7和win10上,现在加入了账户控制,有些程序如果要写注册表,如要开机自启动,需要程序以管理员身份运行。那如何在编译的时候就让程序以管理员身份运行呢? 1.右击项目-》属性-》安全性-》勾...
  • zhaoyuqings
  • zhaoyuqings
  • 2016年11月29日 15:44
  • 915

如何让生成的程序以管理员身份运行(C++builder 2010)

(转载自http://feng06.blog.163.com/blog/static/13501502014102385528860/) 在vista以后的windows版本中,有些时候需要提升编译...
  • Anton8801
  • Anton8801
  • 2016年04月21日 14:44
  • 924

C#用代码默认让程序以管理员权限运行

using System; using System.Collections.Generic; using System.Windows.Forms;namespace WinIoTest { ...
  • basicfu
  • basicfu
  • 2016年05月05日 09:56
  • 222

WPF以管理员运行程序

在App.cs中增加检查管理员代码和重写启动函数
  • CLeopard
  • CLeopard
  • 2014年10月29日 11:20
  • 4529

设置VS2015以管理员权限启动

右键打开devenv.exe的属性,竟然没有兼容性设置,无法设置管理员权限启动。只能想其他的办法了。 在他的启动器上面下手,路径C:\Program Files (x86)\Common Fil...
  • langshanglibie
  • langshanglibie
  • 2016年04月14日 14:32
  • 5630
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何代码设置以管理员身份启动程序
举报原因:
原因补充:

(最多只允许输入30个字)