windows 方法调用失败,原因是GetCurrentThreadId的[System.RuntimeType]

zbwhf8kr  于 2023-02-09  发布在  Windows
关注(0)|答案(2)|浏览(232)

我想用下面的powershell脚本获取Windows进程的内存转储。
我曾经尝试过这个脚本。但是它给予以下错误:
方法调用失败,因为[System.RuntimeType]不包含名为“GetCurrentThreadId”的方法。

#############################################################
$process = Get-Process -Name AggregatorHost
$threadId = [System.Diagnostics.Process].GetCurrentThreadId()
$thread = $process.Threads | Where-Object { $_.Id -eq $threadId }
$thread.Export("test.dmp")
###################################################################

如何解决这个问题或请告诉我,如果你有其他办法?
powershell内存转储

bq9c1y66

bq9c1y661#

Process.GetCurrentTheadId是一个 static 方法,因此需要使用静态成员调用操作符::(与常规成员调用操作符.相反):

[System.Diagnostics.Process]::GetCurrentThreadId()

话虽如此,我怀疑您提供的代码是否能达到预期效果-GetCurrentThreadId将从powershell进程 * 中的执行线程 * 获取线程ID,并且您不会在同一个 Boot 周期中找到属于另一个进程 * 的相同线程ID

2uluyalo

2uluyalo2#

[System.RuntimeType]不包含名为"GetCurrentThreadId"的方法。
让我们找到一个类型 * 包含 * 这样的方法:

Get-Type -ErrorAction SilentlyContinue |
    Where-Object {$_.GetMethods().Name -eq 'GetCurrentThreadId'} |
        Select-Object -ExpandProperty FullName
System.AppDomain

但是,下面的代码片段显示以这种方式标识的线程(System.AppDomain classGetCurrentThreadId静态方法)属于调用进程(因此,在Get-Process -Name AggregatorHost中找不到):
一个二个一个一个
此外:
AppDomain.GetCurrentThreadId已被弃用,因为当托管线程在纤程(即轻型线程)上运行时,它不提供稳定的ID。若要获取托管线程的稳定标识符,请改用Thread上的ManagedThreadId属性。

相关问题