【问题标题】:How to elevate application when UAC is turned Off?UAC关闭时如何提升应用程序?
【发布时间】:2013-10-17 03:06:24
【问题描述】:

我正在开发需要管理权限的 C#/.NET 应用程序。它将在 WinXP 和 Win7 下运行。为了在用户作为标准用户(不是管理员组的成员)运行时请求提升权限,我在清单中嵌入了以下行:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

而且,当 UAC 打开时,它在 Win7 中运行良好。系统会提示用户提升权限、输入凭据等。
问题是在 Win7 中 UAC 关闭时。应用程序在没有 UAC 提示且没有提升权限的情况下启动。

有没有办法在 UAC 关闭时请求提升和弹出 UAC 提示?

【问题讨论】:

  • 所以用户不是本地管理员,但是当打开 UAC 时,用户会在 UAC 提示符中输入一些具有管理权限的其他凭据?
  • 不,那里没有回答。我已经在做那里所说的了。问题是解决方案并不总是有效。这是个问题。
  • 所以,这个很接近,但没有明确的答案:stackoverflow.com/questions/17271458/…
  • 当然你关闭的是程序显示 UAC 提示的能力:)

标签: c# uac


【解决方案1】:

不,但有一个解决方法。

UAC 关闭并 阻止应用程序以管理员身份运行(假设您有管理员密码,就像您所做的那样),只会使其更难。正如您正确指出的那样,在禁用 UAC 并在清单中设置 requireAdministrator 的情况下,右键单击并选择 Run as administrator 实际上并没有提升进程,正如 Microsoft 所指出的那样:“Application might launch but will fail later

两步:

1) 按住 Shift 并右键单击应用程序并选择 Run as a different user。然后只需使用您的管理员用户名和密码进行身份验证,您的应用程序应该以管理员身份运行。它对我有用。

2) 构建一个运行asInvoker 并检查管理权限的小型可执行文件。当它在没有它们的情况下运行时,警告用户并告诉他们Shift-Right Click,然后Run as a different user。如果您的小程序具有管理员访问权限,则使用ShellExecute 调用您的主要requireAdministrator 应用程序。有关流程图,请参阅Figure 9 here。您基本上是在用自己的 UAC 对话框替换内置的 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);
}

【讨论】:

    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 2013-06-14
    • 2012-06-16
    • 2013-05-28
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多