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

[复制链接]
发表于 昨天 20:56 | 显示全部楼层 |阅读模式
一、疑难杂症📍
​        某天,开开心心的使用了最新的.net9开发了一个winform步伐,在发布成x64架构的单文件exe后,在电脑上面竟然打不开,经过多次尝试后发现x86版本的在本地电脑上测试没有问题,但是一发布成x64模式则会举行报错
二、场景重现

发布配置如上,当使用系统自带的事件查看器drump错误,抓到数据如下
  1. Version=1
  2. EventType=APPCRASH
  3. EventTime=134012782822231598
  4. ReportType=2
  5. Consent=1
  6. UploadTime=134012783158499355
  7. ReportStatus=268439648
  8. ReportIdentifier=34beb59a-eca4-4639-82ac-a6a356f6c0ee
  9. IntegratorReportIdentifier=7be766a2-0334-435e-8f1f-9de061e719c4
  10. Wow64Host=34404
  11. NsAppName=工具.exe
  12. OriginalFilename=工具.dll
  13. AppSessionGuid=00003770-0001-0205-fae8-4e7bea1bdc01
  14. TargetAppId=W:0006860c34e8850dfd245f76021df6a94dbd00000000!0000084e67ec0f97c6d906b825c90602a2ce4666eb41!工具.exe
  15. TargetAppVer=2025//06//16:18:48:31!0!工具.exe
  16. BootId=4294967295
  17. TargetAsId=2372
  18. IsFatal=1
  19. EtwNonCollectReason=4
  20. Response.BucketId=6bd1075ac6d404d421418afefa96e95b
  21. Response.BucketTable=4
  22. Response.LegacyBucketId=1243427799861487963
  23. Response.type=4
  24. Sig[0].Name=应用程序名
  25. Sig[0].Value=工具.exe
  26. Sig[1].Name=应用程序版本
  27. Sig[1].Value=1.0.0.0
  28. Sig[2].Name=应用程序时间戳
  29. Sig[2].Value=685066ff
  30. Sig[3].Name=故障模块名称
  31. Sig[3].Value=KERNELBASE.dll
  32. Sig[4].Name=故障模块版本
  33. Sig[4].Value=10.0.19041.1202
  34. Sig[5].Name=故障模块时间戳
  35. Sig[5].Value=c9db1934
  36. Sig[6].Name=异常代码
  37. Sig[6].Value=c0000602
  38. Sig[7].Name=异常偏移
  39. Sig[7].Value=000000000010be3e
  40. DynamicSig[1].Name=OS 版本
  41. DynamicSig[1].Value=10.0.19044.2.0.0.256.191
  42. DynamicSig[2].Name=区域设置 ID
  43. DynamicSig[2].Value=2052
  44. DynamicSig[22].Name=其他信息 1
  45. DynamicSig[22].Value=162d
  46. DynamicSig[23].Name=其他信息 2
  47. DynamicSig[23].Value=162dc7323adee510a77f5cd94c6dfe5f
  48. DynamicSig[24].Name=其他信息 3
  49. DynamicSig[24].Value=cdd1
  50. DynamicSig[25].Name=其他信息 4
  51. DynamicSig[25].Value=cdd1120f7c4950a490c053074b983c78
  52. UI[2]=C:\win-x64\工具.exe
  53. LoadedModule[0]=C:\win-x64\工具.exe
  54. LoadedModule[1]=C:\Windows\SYSTEM32\ntdll.dll
  55. LoadedModule[2]=C:\Windows\System32\KERNEL32.DLL
  56. LoadedModule[3]=C:\Windows\System32\KERNELBASE.dll
  57. LoadedModule[4]=C:\Windows\SYSTEM32\apphelp.dll
  58. LoadedModule[5]=C:\InetPub\ftproot\Tipray\Ldterm\ghijt64.DLL
  59. LoadedModule[6]=C:\Windows\System32\ADVAPI32.dll
  60. LoadedModule[7]=C:\Windows\System32\msvcrt.dll
  61. LoadedModule[8]=C:\Windows\System32\sechost.dll
  62. LoadedModule[9]=C:\Windows\System32\RPCRT4.dll
  63. LoadedModule[10]=C:\Windows\System32\ole32.dll
  64. LoadedModule[11]=C:\Windows\System32\ucrtbase.dll
  65. LoadedModule[12]=C:\Windows\System32\combase.dll
  66. LoadedModule[13]=C:\Windows\System32\GDI32.dll
  67. LoadedModule[14]=C:\Windows\System32\win32u.dll
  68. LoadedModule[15]=C:\Windows\System32\gdi32full.dll
  69. LoadedModule[16]=C:\Windows\System32\msvcp_win.dll
  70. LoadedModule[17]=C:\Windows\System32\USER32.dll
  71. LoadedModule[18]=C:\Windows\System32\OLEAUT32.dll
  72. LoadedModule[19]=C:\Windows\System32\SHELL32.dll
  73. LoadedModule[20]=C:\Inetpub\ftproot\Tipray\LdTerm\LdSmartEnc64.dll
  74. LoadedModule[21]=C:\Windows\SYSTEM32\FLTLIB.DLL
  75. LoadedModule[22]=C:\Windows\System32\IMM32.DLL
  76. LoadedModule[23]=C:\Inetpub\ftproot\Tipray\LdTerm\HookCreateProcessInternal64.dll
  77. LoadedModule[24]=C:\Inetpub\ftproot\Tipray\LdTerm\LdUserInjectDll64.dll
  78. LoadedModule[25]=C:\Inetpub\ftproot\Tipray\LdTerm\HookDataInteractionx64.dll
  79. LoadedModule[26]=C:\Inetpub\ftproot\Tipray\LdTerm\LdHook64.dll
  80. LoadedModule[27]=C:\Windows\System32\PSAPI.DLL
  81. LoadedModule[28]=C:\Windows\SYSTEM32\WINSPOOL.DRV
  82. LoadedModule[29]=C:\Windows\SYSTEM32\VERSION.dll
  83. LoadedModule[30]=C:\Windows\SYSTEM32\CRYPTBASE.DLL
  84. LoadedModule[31]=C:\Inetpub\ftproot\Tipray\LdTerm\ghhlp64.dll
  85. LoadedModule[32]=C:\Inetpub\ftproot\Tipray\LdTerm\MonFileOp64.dll
  86. LoadedModule[33]=C:\Windows\System32\SHLWAPI.dll
  87. LoadedModule[34]=C:\Windows\SYSTEM32\MPR.dll
  88. LoadedModule[35]=C:\Inetpub\ftproot\Tipray\LdTerm\LdWaterMarkHook64.dll
  89. LoadedModule[36]=C:\Windows\WinSxS\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.19041.1288_none_91a663c8cc864906\gdiplus.dll
  90. State[0].Key=Transport.DoneStage1
  91. State[0].Value=1
  92. OsInfo[0].Key=vermaj
  93. OsInfo[0].Value=10
  94. OsInfo[1].Key=vermin
  95. OsInfo[1].Value=0
  96. OsInfo[2].Key=verbld
  97. OsInfo[2].Value=19044
  98. OsInfo[3].Key=ubr
  99. OsInfo[3].Value=1288
  100. OsInfo[4].Key=versp
  101. OsInfo[4].Value=0
  102. OsInfo[5].Key=arch
  103. OsInfo[5].Value=9
  104. OsInfo[6].Key=lcid
  105. OsInfo[6].Value=2052
  106. OsInfo[7].Key=geoid
  107. OsInfo[7].Value=45
  108. OsInfo[8].Key=sku
  109. OsInfo[8].Value=191
  110. OsInfo[9].Key=domain
  111. OsInfo[9].Value=1
  112. OsInfo[10].Key=prodsuite
  113. OsInfo[10].Value=256
  114. OsInfo[11].Key=ntprodtype
  115. OsInfo[11].Value=1
  116. OsInfo[12].Key=platid
  117. OsInfo[12].Value=10
  118. OsInfo[13].Key=sr
  119. OsInfo[13].Value=0
  120. OsInfo[14].Key=tmsi
  121. OsInfo[14].Value=1099223
  122. OsInfo[15].Key=osinsty
  123. OsInfo[15].Value=1
  124. OsInfo[16].Key=iever
  125. OsInfo[16].Value=11.789.19041.0-11.0.1000
  126. OsInfo[17].Key=portos
  127. OsInfo[17].Value=0
  128. OsInfo[18].Key=ram
  129. OsInfo[18].Value=7880
  130. OsInfo[19].Key=svolsz
  131. OsInfo[19].Value=238
  132. OsInfo[20].Key=wimbt
  133. OsInfo[20].Value=0
  134. OsInfo[21].Key=blddt
  135. OsInfo[21].Value=191206
  136. OsInfo[22].Key=bldtm
  137. OsInfo[22].Value=1406
  138. OsInfo[23].Key=bldbrch
  139. OsInfo[23].Value=vb_release
  140. OsInfo[24].Key=bldchk
  141. OsInfo[24].Value=0
  142. OsInfo[25].Key=wpvermaj
  143. OsInfo[25].Value=0
  144. OsInfo[26].Key=wpvermin
  145. OsInfo[26].Value=0
  146. OsInfo[27].Key=wpbuildmaj
  147. OsInfo[27].Value=0
  148. OsInfo[28].Key=wpbuildmin
  149. OsInfo[28].Value=0
  150. OsInfo[29].Key=osver
  151. OsInfo[29].Value=10.0.19041.1288.amd64fre.vb_release.191206-1406
  152. OsInfo[30].Key=buildflightid
  153. OsInfo[31].Key=edition
  154. OsInfo[31].Value=IoTEnterpriseS
  155. OsInfo[32].Key=ring
  156. OsInfo[32].Value=Retail
  157. OsInfo[33].Key=expid
  158. OsInfo[34].Key=fconid
  159. OsInfo[35].Key=containerid
  160. OsInfo[36].Key=containertype
  161. OsInfo[37].Key=edu
  162. OsInfo[37].Value=0
  163. FriendlyEventName=已停止工作
  164. ConsentKey=APPCRASH
  165. AppName=工具
  166. AppPath=C:\win-x64\工具.exe
  167. NsPartner=windows
  168. NsGroup=windows8
  169. ApplicationIdentity=8CE23494FD3E8EC4878D62E3C55F8B8E
  170. MetadataHash=784019804
复制代码
准备去微软的开源库查查是否有这方面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文件中,段,加上false,重新编译步伐,再发布后即可正常运行。
问题到这就解决了,当从.net8升级到.ne9后,没想到还会碰到这种疑难杂症,看来在每一个大版本更新之后,还是要慎重,当然自身的调试debug能力也得有,出现问题的时候可以或许定位到问题点,没有解决思路的时候不如去官方的issue上面看看,可能会有惊喜哦!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表