检查进程是否正在以管理员身份运行/已从另一个应用程序提升-Windows 10

时间:2019-01-23 15:58:23

标签: c# vb.net

enter image description here是否可以通过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任务管理器中,您可以查看进程是否以“提升”运行。我只需要一些东西就可以在代码中捕获它。

1 个答案:

答案 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