C# 如何检测是否使用dotnet或powershell提升了特定进程

C# 如何检测是否使用dotnet或powershell提升了特定进程,c#,powershell,process-elevation,C#,Powershell,Process Elevation,如何检测特定流程是否提升。此进程与运行代码的进程不同。我希望能够从PowerShell或C#中执行此操作。请尝试以下答案: 该UacHelper将需要一些小的更改。例如,IsProcessElevated在CurrentProcess上使用OpenProcessToken——您需要将IsProcessElevated更改为一个函数,并将进程设置为一个参数,这样您就可以检查任何,而不仅仅是当前进程 一般来说,这个类完成了所有您需要做的事情。它检查分配给进程的安全属性。我认为代码本身就说明了问题 顺

如何检测特定流程是否提升。此进程与运行代码的进程不同。我希望能够从PowerShell或C#中执行此操作。

请尝试以下答案:

UacHelper
将需要一些小的更改。例如,
IsProcessElevated
在CurrentProcess上使用
OpenProcessToken
——您需要将
IsProcessElevated
更改为一个函数,并将
进程
设置为一个参数,这样您就可以检查任何,而不仅仅是当前进程

一般来说,这个类完成了所有您需要做的事情。它检查分配给进程的安全属性。我认为代码本身就说明了问题

顺便说一句。如果您认为代码适合您的需要,请将您的问题标记为该代码的“副本”-这将有助于其他人找到该代码。

也许这会有所帮助

Get-Process |
Add-Member -Name Elevated -MemberType ScriptProperty -Value {if ($this.Name -in @('Idle','System')) {$null} else {-not $this.Path -and -not $this.Handle} } -PassThru |
Format-Table Name,Elevated

上面的脚本可以看出,它很好,如果运行它的进程没有提升,它就可以工作,但是如果进程本身提升了,它就不能工作。你是对的,我在测试代码时发现了这一点。如果从非提升会话进行测试,则无法读取其他属性。例如,processmodules属性为null(检查路径和句柄更简单)。