C# UAC关闭时如何提升应用程序?

C# UAC关闭时如何提升应用程序?,c#,uac,C#,Uac,我正在开发需要管理权限的C/.NET应用程序。它将在WinXP和Win7下运行。当用户以Standar用户而不是Administrators组的成员身份运行时,为了请求提升权限,我嵌入了带有以下行的清单: <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 而且,当在UAC中打开时,这在Win7中可以正常工作。提示用户输入提升的权限、输入凭据等。 问题是在Win7中,当在UAC中关闭时。

我正在开发需要管理权限的C/.NET应用程序。它将在WinXP和Win7下运行。当用户以Standar用户而不是Administrators组的成员身份运行时,为了请求提升权限,我嵌入了带有以下行的清单:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
而且,当在UAC中打开时,这在Win7中可以正常工作。提示用户输入提升的权限、输入凭据等。 问题是在Win7中,当在UAC中关闭时。应用程序启动时没有UAC提示,也没有提升的权限


是否有方法在UAC关闭时请求提升和弹出UAC提示?

没有,但有一个解决方法

UAC关闭并不会阻止应用程序以管理员身份运行,假设您拥有管理员密码,就像您所做的那样,这只会让它更难运行。正如您正确指出的,在禁用UAC并在清单中设置requireAdministrator的情况下,右键单击并选择“以管理员身份运行”实际上不会提升流程,正如Microsoft所指出的:

两个步骤:

1按住Shift键的同时右键单击应用程序并选择“作为其他用户运行”。然后只需使用管理员用户名和密码进行身份验证,应用程序就应该以管理员身份运行。这对我有用

2构建一个运行Invoker并检查管理权限的小型可执行文件。当它在没有它们的情况下运行时,警告用户并告诉他们按住Shift键并单击鼠标右键,然后作为其他用户运行。如果您的小程序具有管理员访问权限,则使用ShellExecute调用您的主requireAdministrator应用程序。有关流程图,请参阅。您基本上是在用自己的对话框替换内置的UAC对话框,因为,嘿,UAC关闭了

这里是C++中的一个小代码示例,它从StAcExobe上的某个地方检查管理员访问:

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);
}

因此,用户不是本地管理员,但当UAC打开时,用户将在UAC提示符中输入一些具有管理权限的其他凭据?否,没有回答。我已经在做那里说的事了。问题是解决方案并不总是有效的。这是一个问题。因此,这一个很接近,但它没有明确的答案:您确实关闭了一个程序显示UAC提示符的功能: