不,但有一个解决方法。
UAC 关闭并不妨碍应用程序以管理员身份运行(假设您有管理员密码,就像您所做的那样),只是让它变得更难。正如您正确指出的那样,在禁用 UAC 并requireAdministrator
在清单中设置的情况下,右键单击并选择Run as administrator
实际上并没有提升进程,正如 Microsoft 所指出的那样:“应用程序可能会启动,但稍后会失败”
两个步骤:
1) 按住 Shift 的同时右键单击应用程序并选择Run as a different user
。然后只需使用您的管理员用户名和密码进行身份验证,您的应用程序应该以管理员身份运行。它对我有用。
2) 构建一个运行asInvoker
并检查管理权限的小型可执行文件。当它在没有它们的情况下运行时,警告用户并告诉他们 Shift-Right Click,然后Run as a different user
. 如果您的小程序具有管理员访问权限,则用于ShellExecute
调用您的主requireAdministrator
应用程序。有关流程图,请参见此处的图 9 。您基本上是用您自己的替换内置 UAC 对话框,因为,嘿,UAC 已关闭。
这是 StackOverflow 上某个地方的 C++ 小代码示例,用于检查管理员访问权限:
BOOL IsUserAdmin(VOID)
{
BOOL b;
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
b = AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup);
if(true==b)
{
if (!CheckTokenMembership( NULL, AdministratorsGroup, &b))
{
b = FALSE;
}
FreeSid(AdministratorsGroup);
}
return(b);
}