【问题标题】:VB6 Code to check if User needs to "Run As Administrator"VB6代码检查用户是否需要“以管理员身份运行”
【发布时间】:2015-01-27 07:34:06
【问题描述】:

我的 Visual Basic 6 应用程序的多个用户必须“以管理员身份运行” 其他的不要,直接双击即可。

是否有我可以在程序打开时添加代码以检查是否需要以管理员身份运行,然后打开一个窗口来表明这一点?

【问题讨论】:

标签: vb6 uac administrator


【解决方案1】:

您需要使用 API 来确定当前用户是否具有管理权限。

幸运的是,有一个函数可以为False 返回0,以指示当前用户的状态。即:IsUserAnAdmin

下面是如何声明和使用它:

'In a module file:
Public Declare Function IsUserAnAdmin Lib "Shell32" Alias "#680" () As Integer

然后在你的Form_Load()

Sub Form_Load()

   If IsUserAnAdmin() = 0 Then 
     MsgBox "Not admin" 
   Else 
     MsgBox "Admin" 
   End If

End Sub

注意:Shell 函数IsUserAnAdmin is depricated。您可以将功能替换为 (pseudocode):

Boolean IsUserAdmin()
{
   PSID administratorsGroup = StringToSid("S-1-5-32-544"); //well-known Administrators group

   Boolean isAdmin;
   if (not CheckTokenMembership(0, administratorsGroup, out isAdmin) then
      isAdmin = false;

   FreeSid(administratorsGroup);

   return isAdmin;
}

【讨论】:

  • 您希望将其声明为 Public 而不是 Private,否则您将无法从表单中调用它(除非您将其包装在另一个公共函数中)。
  • @JimBillig 谢谢。我修好了
  • 您可以在表单声明中将其声明为私有
【解决方案2】:

只需将适当的“级别”值添加到应用程序清单即可。

清单片段示例:

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator"
                                     uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo> 

这会导致 Windows 引发 UAC 提示,而无需用户进行任何特殊操作,也无需添加任何代码。既然 Windows XP 已经死了,它在所有受支持的 Windows 版本中都可以正常工作,除了 Windows Server 2003 的挥之不去的残余部分,它们计划在几个月内提供扩展支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-15
    • 2011-08-10
    • 2015-01-04
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2017-09-15
    • 2015-02-06
    相关资源
    最近更新 更多