是否可以通过VB .Net WinForm应用程序检查现有进程是否已经以Administrator / Elevated身份运行?我有一个通过API连接到Main应用程序的实用程序。在Windows 7上一切正常,但是在Windows 10上,我的实用程序无法通过API连接到主程序。我累了很多事,但没有任何效果。最终,我发现如果我以管理员身份运行主程序,我的API实用程序就可以像这样正常工作/连接。我查看了Process类(https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process?view=netframework-4.7.2)的文档,但找不到对提升的执行属性显而易见的任何内容。任何建议或代码片段将不胜感激。
在Windows 10任务管理器中,您可以查看进程是否以“提升”运行。我只需要一些东西就可以在代码中捕获它。
答案 0 :(得分:0)
经过一些测试后,我发现在使用以下设置添加app.manifest文件并在代码中添加属性IsElevated之后,我可以看到该exe在Task Manager中是否以Elevated运行。希望这可以帮助寻找类似问题的任何人。
来自app.manifest文件:
<security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <!-- UAC Manifest Options If you want to change the Windows User Account Control level replace the requestedExecutionLevel node with one of the following. <requestedExecutionLevel level="asInvoker" uiAccess="false" /> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> Specifying requestedExecutionLevel element will disable file and registry virtualization. Remove this element if your application requires this virtualization for backwards compatibility. --> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> </security>
Public ReadOnly Property IsElevated As Boolean
Get
Return New WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator)
End Get
End Property
在代码中使用时:
If IsElevated = True Then
Me.Text = "TEST Utility - Administrator (Elevated)"
End If
If IsElevated = False Then
Me.Text = "TEST Utility - Normal (Non-Elevated)"
End If