如何检查应用程序是否以管理员VB.NET身份运行

时间:2017-04-19 11:42:35

标签: vb.net admin vb.net-2010

我已经创建了一个应用程序,它的一些功能仅适用于管理员权限,

如何检查应用程序是否以管理员权限运行?

  • 如果应用程序未运行且管理员权限以管理员身份运行,则显示一个消息框。

4 个答案:

答案 0 :(得分:6)

Imports System.Security.Principal

Dim identity = WindowsIdentity.GetCurrent()
Dim principal = new WindowsPrincipal(identity)
Dim isElevated as Boolean = principal.IsInRole(WindowsBuiltInRole.Administrator) 
If isElevated Then
  MessageBox.Show("Is Admin")
End If

在VB.Net中甚至还有一个捷径:

If My.User.IsInRole(ApplicationServices.BuiltInRole.Administrat‌​or) Then ... 

答案 1 :(得分:4)

只需将app.manifest更改为强制要求管理:

解决方案资源管理器 - >我的项目 - >查看Windows设置

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

答案 2 :(得分:0)

您可以尝试在try / catch块内的系统驱动器上创建一个文件,如果它捕获了访问被拒绝的异常,那么这意味着该应用程序没有以管理员身份运行。

Imports System.IO
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            File.Create("c://test.txt")
            MessageBox.Show("Is Admin")
            File.Delete("c://test.txt")
        Catch ex As Exception
            If ex.ToString.Contains("denied") Then
                MessageBox.Show("Is Not Admin")
            End If
        End Try
    End Sub
End Class

答案 3 :(得分:0)

C#6 (或更高版本)的版本,改编自本页其他位置发布的 Visual Basic 解决方案。为了通用目的 1 ,我在这里设想一个bool - 值静态属性

using System.Security.Principal;

public static bool IsAdministrator =>
    new WindowsPrincipal(WindowsIdentity.GetCurrent())
            .IsInRole(WindowsBuiltInRole.Administrator);

现在已经证明了这一点,我们必须承认,@ Mederic的方法确实看起来确实优越,因为在推测检测和报告之后,它还不清楚应用程序可能会有什么帮助。这样一个(可能是)关键的前提条件已经失败了。毫无疑问,将这种性质的问题委托给操作系统更明智,更安全。


1 即消除&#34; MessageBox&#34;由OP表达的desiderata。