我已经创建了一个应用程序,它的一些功能仅适用于管理员权限,
如何检查应用程序是否以管理员权限运行?
答案 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.Administrator) 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。