.NET报错&CLR 启动失败问题排查与解决方案
用户终端和.NET程序频繁崩溃,发现是火绒安全软件通过系统环境变量APPDOMAIN_MANAGER_ASM和APPDOMAIN_MANAGER_TYPE注入的.NET钩子DLL丢失或损坏所致。诊断显示CLR因无法加载System.Collections.Modle.dll而报错。解决方案包括删除问题环境变量或重新安装火绒软件,并需重启系统。该问题导致Docker安装程序无响应、PowerShel
1. 经过
最近我发现我的终端打开就报错,查了很久试了挺多方法都不行。

后来忙起来就下载了 PowerShell 7.5.4 作为代替,基本平替。
但是当我要在这个电脑里安装 Docker 时,发现下载的安装包点击完全没有反应。
因为急着用 Docker,又是到处乱查、各种问 AI。
终于找到了,解决方法。
总结:我的问题是火绒安全软件通过系统环境变量 APPDOMAIN_MANAGER_ASM 和 APPDOMAIN_MANAGER_TYPE 注入了一个 .NET 钩子 DLL,但该 DLL 文件丢失或损坏,导致所有 .NET 程序启动时都因找不到这个 DLL 而崩溃。
之前我找到的方法都在修复 .NET Framework 本身,但问题不在 .NET,而在于系统环境变量指向了一个不存在的 DLL。
下面是整个解决流程,希望对同样遇到这个问题的朋友提供一点帮助!
2. 问题现象
2.1 主要症状
| 现象 | 描述 |
|---|---|
| Docker Desktop 安装程序无响应 | 双击安装程序后没有任何界面弹出,程序静默退出 |
| Windows PowerShell 5.1 启动失败 | 报错:“启动 CLR 失败,返回 HRESULT 80131522”,退出代码 -65536 |
| 其他 .NET 程序崩溃 | 所有依赖 .NET Framework 4.x 的程序都无法正常运行 |
2.2 Windows 事件日志错误
应用程序: Docker Desktop Installer.exe
Framework 版本: v4.0.30319
说明: 由于未经处理的异常,进程终止。
异常信息: System.IO.FileNotFoundException
异常信息: System.TypeLoadException 在 System.AppDomain.CreateAppDomainManager()
3. 问题根本原因
3.1 原因分析
火绒安全软件的 .NET AppDomainManager 注入机制出现故障
火绒安全软件通过设置以下系统环境变量来注入 .NET 钩子,用于监控所有 .NET 程序的运行:
APPDOMAIN_MANAGER_ASM = System.Collections.Modle, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fffa069857d3563b
APPDOMAIN_MANAGER_TYPE = AppModle
这两个环境变量的作用:
APPDOMAIN_MANAGER_ASM:指定要加载的程序集(DLL)名称APPDOMAIN_MANAGER_TYPE:指定 AppDomainManager 的类型名
3.2 故障机制
当 .NET CLR(公共语言运行时)启动任何 .NET 程序时:
- CLR 读取
APPDOMAIN_MANAGER_ASM环境变量 - 尝试加载
System.Collections.Modle.dll文件 - 由于该 DLL 文件丢失或损坏,加载失败
- CLR 抛出
FileNotFoundException和TypeLoadException - 整个 .NET 程序崩溃退出
3.3 为什么 DLL 会丢失?
可能的原因:
- 火绒软件更新失败或不完整
- 火绒文件被其他安全软件误删
- 系统更新或清理工具误删
- 火绒卸载不完整(删除了 DLL 但未清理环境变量)
注意:即使火绒没有卸载,只要 DLL 文件丢失,问题就会存在!
4. 诊断过程
4.1 第一步:启用 .NET Fusion 程序集绑定日志
在管理员 PowerShell 中运行:
# 创建日志目录
New-Item -Path "C:\FusionLog" -ItemType Directory -Force
# 启用 Fusion 日志
reg add "HKLM\SOFTWARE\Microsoft\Fusion" /v EnableLog /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Microsoft\Fusion" /v ForceLog /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Microsoft\Fusion" /v LogPath /t REG_SZ /d "C:\FusionLog\" /f
reg add "HKLM\SOFTWARE\Microsoft\Fusion" /v LogFailures /t REG_DWORD /d 1 /f
4.2 第二步:触发错误并查看日志
-
运行出错的程序(如双击 Docker 安装程序)
-
查看日志目录:
Get-ChildItem "C:\FusionLog" -Recurse -Filter "*.htm" | Sort-Object LastWriteTime -Descending | Select-Object -First 5 FullName -
用浏览器打开
.htm日志文件
4.3 第三步:分析日志内容
成功的日志示例:
操作成功。
绑定结果: hr = 0x0。操作成功完成。
日志: 通过在 GAC 中查找找到了程序集。
失败的日志示例(关键发现):
操作失败。
绑定结果: hr = 0x80070002。系统找不到指定的文件。
日志: DisplayName = System.Collections.Modle, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fffa069857d3563b
日志: GAC 查找不成功。
日志: 尝试下载新的 URL file:///C:/Users/.../System.Collections.Modle.DLL。
日志: 已尝试所有探测 URLs 但全部失败。
注意 System.Collections.Modle — 这是一个拼写错误的名称(Modle 而不是 Model),且 PublicKeyToken=fffa069857d3563b 不是微软官方的签名。
4.4 第四步:检查系统环境变量
[Environment]::GetEnvironmentVariables("Machine") | Out-String | Select-String "APPDOMAIN"
输出结果:
APPDOMAIN_MANAGER_ASM System.Collections.Modle, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fffa069857d3563b
APPDOMAIN_MANAGER_TYPE AppModle
确认了问题根源!
5. 解决方案
5.1 方案一:删除问题环境变量(推荐)
在管理员 PowerShell 中运行:
# 删除环境变量
[Environment]::SetEnvironmentVariable("APPDOMAIN_MANAGER_ASM", $null, "Machine")
[Environment]::SetEnvironmentVariable("APPDOMAIN_MANAGER_TYPE", $null, "Machine")
# 验证是否删除成功(应返回空)
[Environment]::GetEnvironmentVariable("APPDOMAIN_MANAGER_ASM", "Machine")
[Environment]::GetEnvironmentVariable("APPDOMAIN_MANAGER_TYPE", "Machine")
然后重启电脑。
5.2 方案二:修复火绒(如果想继续使用火绒)
- 完全卸载火绒
- 重启电脑
- 重新下载最新版火绒并安装
- 火绒会重新创建正确的 DLL 文件和环境变量配置
5.3 清理 Fusion 日志(可选)
问题解决后,可以关闭 Fusion 日志以节省磁盘空间:
reg delete "HKLM\SOFTWARE\Microsoft\Fusion" /v EnableLog /f
reg delete "HKLM\SOFTWARE\Microsoft\Fusion" /v ForceLog /f
reg delete "HKLM\SOFTWARE\Microsoft\Fusion" /v LogPath /f
reg delete "HKLM\SOFTWARE\Microsoft\Fusion" /v LogFailures /f
Remove-Item -Path "C:\FusionLog" -Recurse -Force
6. 验证修复结果
重启后运行以下命令验证:
# 测试 .NET Framework 是否正常
[System.Environment]::Version
# 测试 Windows PowerShell 5.1
powershell -Command "Write-Host 'PowerShell 5.1 正常工作'"
# 安装 Docker Desktop
& "$env:USERPROFILE\Downloads\Docker Desktop Installer.exe"
7. 相关知识
7.1 什么是 AppDomainManager?
AppDomainManager 是 .NET Framework 提供的一个扩展点,允许第三方软件在 .NET 程序启动时注入自定义代码。安全软件常用此机制来监控 .NET 程序的行为。
7.2 相关环境变量
| 环境变量 | 作用 |
|---|---|
APPDOMAIN_MANAGER_ASM |
指定 AppDomainManager 所在的程序集名称 |
APPDOMAIN_MANAGER_TYPE |
指定 AppDomainManager 的完整类型名 |
COMPLUS_AppDomainManagerAsm |
同上,另一种写法 |
COMPLUS_AppDomainManagerType |
同上,另一种写法 |
7.3 Fusion 日志
Fusion 是 .NET 程序集加载器的名称。启用 Fusion 日志可以详细记录每个程序集的加载过程,是诊断 .NET 程序集加载失败的利器。
8. 经验教训
- 安全软件的系统钩子是双刃剑 — 注入机制出问题会导致全局性故障
- .NET CLR 启动失败时,优先检查
APPDOMAIN_MANAGER_*环境变量 - Fusion 日志是诊断 .NET 程序集加载问题的最佳工具
- 卸载安全软件后要验证环境变量是否清理干净
- 遇到诡异的系统问题时,先查看 Windows 事件日志(
eventvwr.msc)
9. 快速参考命令
# 检查 APPDOMAIN 环境变量
[Environment]::GetEnvironmentVariables("Machine") | Out-String | Select-String "APPDOMAIN"
# 删除问题环境变量
[Environment]::SetEnvironmentVariable("APPDOMAIN_MANAGER_ASM", $null, "Machine")
[Environment]::SetEnvironmentVariable("APPDOMAIN_MANAGER_TYPE", $null, "Machine")
# 启用 Fusion 日志
reg add "HKLM\SOFTWARE\Microsoft\Fusion" /v EnableLog /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Microsoft\Fusion" /v ForceLog /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Microsoft\Fusion" /v LogPath /t REG_SZ /d "C:\FusionLog\" /f
# 查看 Windows 事件日志中的 .NET 错误
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object { $_.Message -like "*Framework*" }
更多推荐



所有评论(0)