[英]C# Windows Service Import C++ dll Crash with Event ID: 1000 clr.dll
[英]C# - Extracting clr.dll etc. of application
我試圖從另一個用C#編寫的軟件中提取應用程序中的clr.dll和mscorwks.dll。 我的目的是收集內存轉儲分析所需的所有文件,即使該分析是在脫機計算機上完成的。
我到目前為止嘗試過的是
var currentAssembly = Assembly.LoadFrom(process.MainModule.FileName);//with the given process;
var assemblyList = currentAssembly.GetReferencedAssemblies().ToList();
var manifestList = currentAssembly.GetManifestResourceNames();
盡管GetReferencedAssemblies()
沒有給我clr.dll或mscorwks.dll,但是只有mscorlib.dll和GetManifestResourceNames()
給了我軟件中使用的圖像文件。
有沒有人有這樣的經驗? 我是否缺少獲取我想要的DLL的東西?
感謝您的關注!
問候,
爾迪
我猜想實現目標的最佳方法是使用Microsoft.Diagnostics.Runtime
(nuget-package)及其DataTarget
類。 這使您可以附加到流程並從流程中了解任何內容。
為了迭代所有加載的模塊(托管和非托管),您可以執行以下操作:
using (dt = DataTarget.AttachToProcess(proc.Id, 100, AttachFlag.Passive))
{
// since 4.0 we can possibly find more than one runtime (side-by-side CLRs) in one AppDomain...
if (dt.ClrVersions.Count > 0)
{
foreach (var clr in dt.ClrVersions)
{
Console.WriteLine(clr.Version + " " + clr.Flavor.ToString());
}
}
}
其中proc
是System.Diagnostics.Process
的實例。 除了通過ClrVersions
使用快捷方式,您還可以枚舉所有模塊(通過調用EnumerateModules
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.