C# .NET 9 程序如何解决0xc0000602错误
0xc0000602 这个错误几乎让我崩溃,ServBay Windows 版本在某些用户的系统上完全无法运行,双击后必然是闪退,但是在命令行中用 dotnet servbay.dll
又可以正确运行。
同时连带造成的还有另外一个问题,在部分用户的系统上,会提示.NET 9 框架没安装,但事实情况是,.NET 9 框架已经正确安装了。
中途还碰上一个用户刚好是 VMware 的虚拟机出现这个问题,让用户把这个虚拟机打包发过来,在几个不同环境中恢复,都无法复现这个情况。用户换了其他设备也没这个问题,只有在特定的设备、特定的虚拟机上才出现这个问题。同样设备,换另外的虚拟机也没这个问题。
想死。
先看看错误日志:
日志名称: Application
来源: Application Error
日期: 2025/7/22 0:18:51
事件 ID: 1000
任务类别: (100)
级别: 错误
关键字: 经典
用户: 暂缺
计算机: DESKTOP-DOP0SLL
描述:
错误应用程序名称: ServBay.exe,版本: 1.4.0.2507,时间戳: 0x67890000
错误模块名称: KERNELBASE.dll,版本: 10.0.19041.2913,时间戳: 0xa1c3e870
异常代码: 0xc0000602
错误偏移量: 0x000000000012d862
错误进程 ID: 0x22b0
错误应用程序启动时间: 0x01dbfa5b2525a666
错误应用程序路径: C:\ServBay\app\ServBay.exe
错误模块路径: C:\Windows\System32\KERNELBASE.dll
报告 ID: a6721c90-1bc9-4336-9cd3-14bb87e4cc37
错误程序包全名:
错误程序包相对应用程序 ID:
事件 Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Application Error" />
<EventID Qualifiers="0">1000</EventID>
<Version>0</Version>
<Level>2</Level>
<Task>100</Task>
<Opcode>0</Opcode>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2025-07-21T16:18:51.4822289Z" />
<EventRecordID>1593</EventRecordID>
<Correlation />
<Execution ProcessID="0" ThreadID="0" />
<Channel>Application</Channel>
<Computer>DESKTOP-DOP0SLL</Computer>
<Security />
</System>
<EventData>
<Data>ServBay.exe</Data>
<Data>1.4.0.2507</Data>
<Data>67890000</Data>
<Data>KERNELBASE.dll</Data>
<Data>10.0.19041.2913</Data>
<Data>a1c3e870</Data>
<Data>c0000602</Data>
<Data>000000000012d862</Data>
<Data>22b0</Data>
<Data>01dbfa5b2525a666</Data>
<Data>C:\ServBay\app\ServBay.exe</Data>
<Data>C:\Windows\System32\KERNELBASE.dll</Data>
<Data>a6721c90-1bc9-4336-9cd3-14bb87e4cc37</Data>
<Data>
</Data>
<Data>
</Data>
</EventData>
</Event>
----------------------------------------------------
日志名称: Application
来源: Application Error
日期: 2025/7/22 0:46:16
事件 ID: 1000
任务类别: (100)
级别: 错误
关键字: 经典
用户: 暂缺
计算机: DESKTOP-DOP0SLL
描述:
错误应用程序名称: ServBay.exe,版本: 1.4.1.2507,时间戳: 0x68500000
错误模块名称: KERNELBASE.dll,版本: 10.0.19041.2913,时间戳: 0xa1c3e870
异常代码: 0xc0000602
错误偏移量: 0x000000000012d862
错误进程 ID: 0x244
错误应用程序启动时间: 0x01dbfa5ef91b70e3
错误应用程序路径: C:\ServBay\app\ServBay.exe
错误模块路径: C:\Windows\System32\KERNELBASE.dll
报告 ID: 994a3e2c-6e37-47f6-9e89-411e36a689d3
错误程序包全名:
错误程序包相对应用程序 ID:
事件 Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Application Error" />
<EventID Qualifiers="0">1000</EventID>
<Version>0</Version>
<Level>2</Level>
<Task>100</Task>
<Opcode>0</Opcode>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2025-07-21T16:46:16.0397845Z" />
<EventRecordID>1601</EventRecordID>
<Correlation />
<Execution ProcessID="0" ThreadID="0" />
<Channel>Application</Channel>
<Computer>DESKTOP-DOP0SLL</Computer>
<Security />
</System>
<EventData>
<Data>ServBay.exe</Data>
<Data>1.4.1.2507</Data>
<Data>68500000</Data>
<Data>KERNELBASE.dll</Data>
<Data>10.0.19041.2913</Data>
<Data>a1c3e870</Data>
<Data>c0000602</Data>
<Data>000000000012d862</Data>
<Data>244</Data>
<Data>01dbfa5ef91b70e3</Data>
<Data>C:\ServBay\app\ServBay.exe</Data>
<Data>C:\Windows\System32\KERNELBASE.dll</Data>
<Data>994a3e2c-6e37-47f6-9e89-411e36a689d3</Data>
<Data>
</Data>
<Data>
</Data>
</EventData>
</Event>
----------------------------------------------------
日志名称: Application
来源: .NET Runtime
日期: 2025/7/22 0:36:35
事件 ID: 1023
任务类别: 无
级别: 错误
关键字: 经典
用户: 暂缺
计算机: DESKTOP-DOP0SLL
描述:
Description: A .NET application failed.
Application: ServBay.exe
Path: C:\ServBay\app\ServBay.exe
Message: A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'C:\Program Files\dotnet\'.
Failed to run as a self-contained app.
- The application was run as a self-contained app because 'C:\ServBay\app\ServBay.runtimeconfig.json' did not specify a framework.
- If this should be a framework-dependent app, specify the appropriate framework in 'C:\ServBay\app\ServBay.runtimeconfig.json'.
事件 Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name=".NET Runtime" />
<EventID Qualifiers="0">1023</EventID>
<Version>0</Version>
<Level>2</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2025-07-21T16:36:35.3837344Z" />
<EventRecordID>1598</EventRecordID>
<Correlation />
<Execution ProcessID="0" ThreadID="0" />
<Channel>Application</Channel>
<Computer>DESKTOP-DOP0SLL</Computer>
<Security />
</System>
<EventData>
<Data>Description: A .NET application failed.
Application: ServBay.exe
Path: C:\ServBay\app\ServBay.exe
Message: A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'C:\Program Files\dotnet\'.
Failed to run as a self-contained app.
- The application was run as a self-contained app because 'C:\ServBay\app\ServBay.runtimeconfig.json' did not specify a framework.
- If this should be a framework-dependent app, specify the appropriate framework in 'C:\ServBay\app\ServBay.runtimeconfig.json'.
</Data>
</EventData>
</Event>
----------------------------------------------------
日志名称: Application
来源: .NET Runtime
日期: 2025/7/22 0:35:10
事件 ID: 1023
任务类别: 无
级别: 错误
关键字: 经典
用户: 暂缺
计算机: DESKTOP-DOP0SLL
描述:
Description: A .NET application failed.
Application: ServBay.exe
Path: C:\ServBay\app\ServBay.exe
Message: Could not resolve CoreCLR path. For more details, enable tracing by setting COREHOST_TRACE environment variable to 1
事件 Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name=".NET Runtime" />
<EventID Qualifiers="0">1023</EventID>
<Version>0</Version>
<Level>2</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2025-07-21T16:35:10.3637351Z" />
<EventRecordID>1597</EventRecordID>
<Correlation />
<Execution ProcessID="0" ThreadID="0" />
<Channel>Application</Channel>
<Computer>DESKTOP-DOP0SLL</Computer>
<Security />
</System>
<EventData>
<Data>Description: A .NET application failed.
Application: ServBay.exe
Path: C:\ServBay\app\ServBay.exe
Message: Could not resolve CoreCLR path. For more details, enable tracing by setting COREHOST_TRACE environment variable to 1
</Data>
</EventData>
</Event>
最后,终于找到了原因。这个问题,只有在最新的.NET 9+最新的 CPU 系列才会出现。老的设备是不会有这个问题的。
罪魁祸首,是 CET。
根据微软官方说法,在.NET 9 Preview 6开始,CET 会被强制开启。apphost会强制加上一个头部,标记支持 CET。在新的 Intel CPU + 新的 Windows 下,会被执行 CET。但是,如果程序本身是不支持,又或者程序所依赖的 nuget 包不支持 CET 的话,程序就会直接崩溃,没有任何提示,甚至连程序的 main 都进不去,log 也打不出来。
什么叫垃圾,这就是垃圾。
解决方案有两个:
1、让用户打开 Windows 的安全中心-应用和浏览控制-Exploit Protection-程序设置,添加你主程序的名字,比如ServBay.exe
,点击自定义,把“硬件强制实施的堆栈保护”中,“替代系统设置”勾上,保持在“关”的状态,保存。再打开程序就可以了。
2、一劳永逸的方法,在程序的.csproj
文件中,<PropertyGroup>
段,加上<CETCompat>false</CETCompat>
,重新编译程序。
所以,如果你的 .NET 9 程序打开闪退,请尝试这个方法。