繁体   English   中英

在没有UAC的系统上执行具有管理员权限的应用程序

[英]Execute an application with admin rights on system without UAC

我有一个必须使用管理员权限执行的应用程序。 如果UAC开启,一切都很好。 但是,如果关闭UAC,则启动时没有提示(即使对于标准用户),应用程序也会以受限制的权限启动。

动词“runas”的启动过程不起作用。

有没有办法显示标准的UAC登录对话框,并执行具有管理员权限的应用程序,即使关闭了UAC也是如此?

更新 :清单包括:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <assemblyIdentity version="1.1.6.0" processorArchitecture="X86" name="setup" type="win32"/>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
                <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
            </requestedPrivileges>
        </security>
    </trustInfo>
</asmv1:assembly>

当UAC处于活动状态时,即可。 但是如果UAC关闭则不起作用。

更新2 :: MSDN记录此行为步骤6:创建和嵌入应用程序清单(UAC) (请参阅表“标准用户帐户的应用程序启动行为”最后一行)。 所以我无法用任何清单来解决这个问题。 还有其他解决方案吗?

我有一个非常类似的问题,我认为迄今为止的评论并未解决您的实际问题。 我相信他们误解了你的问题的意图。 虽然我的回答不会显示您第一次询问的实际UAC对话框,但它会显示一个解决方法。

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

以下是来自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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM