【发布时间】:2015-01-27 07:34:06
【问题描述】:
我的 Visual Basic 6 应用程序的多个用户必须“以管理员身份运行” 其他的不要,直接双击即可。
是否有我可以在程序打开时添加代码以检查是否需要以管理员身份运行,然后打开一个窗口来表明这一点?
【问题讨论】:
-
有点像这里提到的??vbcity.com/forums/t/138413.aspx
标签: vb6 uac administrator
我的 Visual Basic 6 应用程序的多个用户必须“以管理员身份运行” 其他的不要,直接双击即可。
是否有我可以在程序打开时添加代码以检查是否需要以管理员身份运行,然后打开一个窗口来表明这一点?
【问题讨论】:
标签: vb6 uac administrator
您需要使用 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;
}
【讨论】:
只需将适当的“级别”值添加到应用程序清单即可。
清单片段示例:
<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 的挥之不去的残余部分,它们计划在几个月内提供扩展支持。
【讨论】: