關(guān)于.net9發(fā)布單體exe程序無法打開問題詳解
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
一、疑難雜癥?? 某天,開開心心的使用了最新的.net9開發(fā)了一個winform程序,在發(fā)布成x64架構(gòu)的單文件exe后,在電腦上面竟然打不開,經(jīng)過多次嘗試后發(fā)現(xiàn)x86版本的在本地電腦上測試沒有問題,但是一發(fā)布成x64模式則會進(jìn)行報錯 二、場景重現(xiàn) ![]() 去微軟的開源庫查查是否有這方面issue,一查發(fā)現(xiàn)罪魁禍?zhǔn)拙谷皇?net9sdk的問題,看來出現(xiàn)這個問題的人還不少,報錯的環(huán)境也是各種各樣的 三、問題導(dǎo)致原因?? 1.在特定的VMware 的虛擬機(jī)運(yùn)行時會導(dǎo)致此種情況 2.在特定的win10以及之前版本上會出現(xiàn) 3.在系統(tǒng)電腦安裝了防病毒軟件(綠盾、360,等) 在看了多個issue之后,找到了罪魁禍?zhǔn)祝绦騿蛹氨罎⒅挥性谑褂米钚碌?NET9的sdk上在發(fā)布x64版本時會出現(xiàn)這種情況,微軟在.NET 9 Preview 6開始,CET 會被強(qiáng)制開啟。apphost會強(qiáng)制加上一個頭部,標(biāo)記支持 CET。在新的 Intel CPU + 新的 Windows 下,會被執(zhí)行 CET。但是,如果程序本身是不支持,又或者程序所依賴的 nuget 包不支持 CET 的話,程序就會直接崩潰,沒有任何提示,甚至連程序的 main 都進(jìn)不去,log 也打不出來。 所以說,我之前添加的全局錯誤日志為什么沒有抓到這個異常,原來在運(yùn)行時就已經(jīng)崩潰了 四、如何解決?? 1.不要使用x64進(jìn)行發(fā)布,測試使用x86發(fā)布后可以正常打開 2.在受影響機(jī)器上面不要通過雙擊生成的.exe應(yīng)用程序,通過 PowerShell 或 CMD 可正常運(yùn)行 3.在受影響機(jī)器上面打開windows安全種-應(yīng)用和瀏覽控制-Exploit Protection-程序設(shè)置,添加主程序的名字,例如“工具.exe”,點(diǎn)擊自定義,把“硬件強(qiáng)制實施的堆棧保護(hù)”中,“替代系統(tǒng)設(shè)置”勾上,保持在“關(guān)”的狀態(tài),保存。再打開程序就可以了。 4.最后一個就是關(guān)閉.net9的cet功能,在程序的 問題到這就解決了,當(dāng)從.net8升級到.ne9后,沒想到還會遇到這種疑難雜癥,看來在每一個大版本更新之后,還是要慎重,當(dāng)然自身的調(diào)試debug能力也得有,出現(xiàn)問題的時候能夠定位到問題點(diǎn),沒有解決思路的時候不如去官方的issue上面看看,可能會有驚喜哦! ?轉(zhuǎn)自https://www.cnblogs.com/sc-Free-Die/p/19075260 該文章在 2025/9/6 15:27:25 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |