LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

关于.net9发布单体exe程序无法打开问题详解

freeflydom
2025年9月6日 15:26 本文热度 55

一、疑难杂症📍

某天,开开心心的使用了最新的.net9开发了一个winform程序,在发布成x64架构的单文件exe后,在电脑上面竟然打不开,经过多次尝试后发现x86版本的在本地电脑上测试没有问题,但是一发布成x64模式则会进行报错

二、场景重现

 

去微软的开源库查查是否有这方面issue,一查发现罪魁祸首竟然是.net9sdk的问题,看来出现这个问题的人还不少,报错的环境也是各种各样的

三、问题导致原因🐵

1.在特定的VMware 的虚拟机运行时会导致此种情况

2.在特定的win10以及之前版本上会出现

3.在系统电脑安装了防病毒软件(绿盾、360,等)

在看了多个issue之后,找到了罪魁祸首,程序启动及崩溃只有在使用最新的.NET9的sdk上在发布x64版本时会出现这种情况,微软在.NET 9 Preview 6开始,CET 会被强制开启。apphost会强制加上一个头部,标记支持 CET。在新的 Intel CPU + 新的 Windows 下,会被执行 CET。但是,如果程序本身是不支持,又或者程序所依赖的 nuget 包不支持 CET 的话,程序就会直接崩溃,没有任何提示,甚至连程序的 main 都进不去,log 也打不出来。

所以说,我之前添加的全局错误日志为什么没有抓到这个异常,原来在运行时就已经崩溃了

四、如何解决🌵

1.不要使用x64进行发布,测试使用x86发布后可以正常打开

2.在受影响机器上面不要通过双击生成的.exe应用程序,通过 PowerShell 或 CMD 可正常运行

3.在受影响机器上面打开windows安全种-应用和浏览控制-Exploit Protection-程序设置,添加主程序的名字,例如“工具.exe”,点击自定义,把“硬件强制实施的堆栈保护”中,“替代系统设置”勾上,保持在“关”的状态,保存。再打开程序就可以了。

4.最后一个就是关闭.net9的cet功能,在程序的.csproj文件中,<PropertyGroup>段,加上<CETCompat>false</CETCompat>,重新编译程序,再发布后即可正常运行。

问题到这就解决了,当从.net8升级到.ne9后,没想到还会遇到这种疑难杂症,看来在每一个大版本更新之后,还是要慎重,当然自身的调试debug能力也得有,出现问题的时候能够定位到问题点,没有解决思路的时候不如去官方的issue上面看看,可能会有惊喜哦!

​转自https://www.cnblogs.com/sc-Free-Die/p/19075260


该文章在 2025/9/6 15:27:25 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved