如何跳过UAC以管理员身份启动程序

往往我们要用管理员身份去运行一个程序的时候,总是要有一个提示框:



可能会有用户选择禁用UAC,但这毕竟对系统的安全存在影响。下面就用一个简单的方法解决这个问题。该方法就是利用系统自带的任务计划程序来实现的。

一、创建一个任务来运行你所要运行的程序

找到任务计划程序。

方式一、开始菜单->附件->系统工具->任务计划程序;

方式二、直接在开始菜单的搜索栏中输入“任务计划程序”也可以找到;

方式三、运行(win+r)输入“taskschd.msc”。

通过以上三种方式中的一种都可以打开任务计划程序,那么下面就是添加任务了。在任务计划程序的右上角的操作里面单击“创建任务...”




出现如下窗口,按照图示配置好要描述和权限



这里的注意点我已经标记出来了。

说明

第一点:名称可以随意写,但不能与你已有的名称重复;

第二点:勾选使用最高权限运行,因为我们是想用管理员权限来运行一个程序,所以要用高权限,至少管理员权限;

第三点:配置中选择与你机器环境相适应的配置,否则程序运行可能会出问题。

添加好这些基本配置以后,我们要选择用管理员权限来运行哪个程序,这里我演示运行CMD。(我记得在我之前的博文谈到过“如何在CMD下运用管理员权限”,链接:http://blog.csdn.net/zyw_anquan/article/details/7756499)在刚才那个创建任务的界面的第三个选项卡中,添加操作:


红线标出的部分,第一处是你所要执行的操作,第二处是你要执行的程序(exe、com、bat等)所在位置。填好以后确定,至此整个任务计划已经默认地完整配好了,但是你要确定在设置选项卡里面的配置如下(通常默认就是下图所示):


即,你要允许系统运行该任务,第二点,要确定该任务是否会启动新实例。如果你要想更改一些时间或者其他操作可以继续自己添加,这里不赘述了。如果一些按照上述配置做好,确定以后就会出现如下界面:




右键运行该任务,你会看到以管理员身份运行出来的cmd,且没有UAC的提示。


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现C++程序启动时获取管理员权限并且避免UAC提示框的出现,可以通过以下步骤: 1. 在程序代码中添加以下代码,以提升程序的权限: ```c++ BOOL SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege, BOOL bEnablePrivilege) { TOKEN_PRIVILEGES tp; LUID luid; if (!LookupPrivilegeValue(NULL, lpszPrivilege, &luid)) { return FALSE; } tp.PrivilegeCount = 1; tp.Privileges[0].Luid = luid; tp.Privileges[0].Attributes = bEnablePrivilege ? SE_PRIVILEGE_ENABLED : 0; if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) { return FALSE; } return (GetLastError() == ERROR_SUCCESS); } void SetAdministratorPrivilege() { HANDLE hToken; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken); SetPrivilege(hToken, SE_DEBUG_NAME, TRUE); CloseHandle(hToken); } ``` 此代码片段使用Windows API函数 `OpenProcessToken` 和 `AdjustTokenPrivileges` 获取并提升程序的权限。请注意,此代码片段假定您的帐户已具有管理权限。 2. 将以下代码添加到程序的主函数中,以检查程序是否以管理员身份运行。如果不是,则使用管理员权限重新运行程序: ```c++ BOOL IsRunAsAdministrator() { BOOL fIsRunAsAdmin = FALSE; DWORD dwError = ERROR_SUCCESS; PSID pAdministratorsGroup = NULL; SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; if (!AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pAdministratorsGroup)) { dwError = GetLastError(); goto Cleanup; } if (!CheckTokenMembership(NULL, pAdministratorsGroup, &fIsRunAsAdmin)) { dwError = GetLastError(); goto Cleanup; } Cleanup: if (pAdministratorsGroup) { FreeSid(pAdministratorsGroup); pAdministratorsGroup = NULL; } SetLastError(dwError); return fIsRunAsAdmin; } int main() { if (!IsRunAsAdministrator()) { SHELLEXECUTEINFO sei = { sizeof(sei) }; sei.lpVerb = TEXT("runas"); sei.lpFile = TEXT("yourprogram.exe"); sei.nShow = SW_NORMAL; if (!ShellExecuteEx(&sei)) { return GetLastError(); } return 0; } SetAdministratorPrivilege(); // your program code here return 0; } ``` 此代码片段检查程序是否以管理员身份运行。如果不是,它使用 `ShellExecuteEx` 函数以管理员权限重新启动程序。通过此方法重新启动程序会自动获取管理员权限,并且不会出现UAC提示框。 请注意,此方法不能保证在所有Windows版本上都有效。在某些情况下,用户可能需要手动启动程序并选择“以管理员身份运行”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值