You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostPublish.bat命令行运行正常,作为发布后事件执行报错

发布后事件执行BitMono DLL混淆失败:控制台句柄无效问题解决

问题根源

发布后事件运行在非交互式控制台环境中,没有有效的控制台窗口句柄。而BitMono CLI内部调用了Console.Clear()方法,该方法在无控制台的环境下会触发IOException: The handle is invalid错误。直接通过命令提示符运行时属于交互式环境,控制台句柄有效,因此能正常执行。

解决方法

方案1:重定向输入,跳过交互等待

修改批处理中BitMono的调用行,将输入重定向到NUL,避免程序等待用户输入,同时规避控制台交互API的报错:

:: 替换原有的echo | 调用行
BitMono.CLI -f %ProjectDir%%PublishDir%%TargetFileName% -l %ProjectDir%%PublishDir% -o %ProjectDir%%PublishDir%%OutputFolder% < NUL

方案2:配置MSBuild以交互式控制台执行命令

修改CSProj中的Exec任务,添加参数强制在新控制台窗口执行批处理,确保BitMono能获取有效控制台句柄:

<Target Name="DllObfuscating" AfterTargets="Publish">
  <Exec Command="D:\Obfuscation_Script\PostBuild.bat $(ProjectDir) $(PublishDir) $(TargetName) $(TargetExt) &quot;D:\BitMono.CLI\&quot; output\ _Original" 
        UseShellExecute="true" 
        CreateNoWindow="false" />
</Target>

方案3:在批处理中用start命令启动BitMono

在批处理的BitMono调用前添加start /wait,让程序在独立控制台窗口执行并等待完成:

:: 替换原有的echo | 调用行
start /wait BitMono.CLI -f %ProjectDir%%PublishDir%%TargetFileName% -l %ProjectDir%%PublishDir% -o %ProjectDir%%PublishDir%%OutputFolder%

额外注意事项

  • 若$(PublishDir)自带末尾斜杠,可在批处理中添加路径修剪逻辑避免拼接错误:
    set "PublishDir=%PublishDir:~0,-1%"
    
  • 确保带空格的路径参数都正确添加引号,避免批处理解析出错。

内容的提问来源于stack exchange,提问作者Sumit Rao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:57:07