在做项目的是否发现一个bat文件调试怎么都不对,而且也没有报错屏幕一闪就没了,命令行单独执行bat文件一点问题没有,真是非常奇怪灵异之极,查找了网上的解决办法,最终解决。首先说一些这是什么问题,
1、程序一闪在排除指令错误等人为错误的情况下,即便在程序中加了WaitForExit()都没用是因为,bat程序调用的动态库,动态库一执行就已经异步返回,WaitForExit马上结束,但是程序如果没有完成它还在跑,这个时候WaitForExit是没有任何作用的,这个时候要让他停下来就要用pause这个bat指令,相当于在bat执行过程中强制停止。这是一个小技巧可以记下。
2、程序退出才原因是由于中文路径乱码导致识别错误。资源加载不了导致指令错误直接退出。
问题找到后就好办了,网上查了一下解决方法,大概分为两大类,4种方法:其中
第一类是修改windows的系统参数,将系统环境调整到utf-8编码,重点是这里的系统编码一定要和程序字符串编码保持一致,否则改了也没用,
首先win键+R,输入regedit
方法1:修改命令号执行环境编码:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
点击右键-新建,autorun 选择“字符串值”
制作成reg文件代码如下:然后就可以一键运行
**Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Console%SystemRoot%_system32_cmd.exe] "autorun ****"=sz:0000fde9**
方法2:修改cmd系统模式环境编码:
HKEY_CURRENT_USER\Console%SystemRoot%_SYSTEM32_cmd.exe
点击右键-新建,CodePage 选择“32位值”
** 制作成reg文件代码如下:然后就可以一键运行**
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Console%SystemRoot%_system32_cmd.exe] "CodePage"=dword:0000fde9
重量重方法是针对不同的乱码问题,通过手动命令行输入用,方法1,代码调用乱码使用,方法2,也就是说系统环境编码和cmd编码实际是可以不同并且互不影响。这种奇葩设定我也没得说了。
第二类是修改程序中字符串编码以及修改bat文件本身的编码格式,如果你是代码执行就修改字符串编码最简单的是改成UFT-8,
方法3:代码中添加字符串转码指令
string[] linesB = { "你好", "测试文件", "文件出现乱码了!"};
System.IO.File.WriteAllLines(XXX保存文件路径, linesB, Encoding.UTF8);
方法4:打开bat批处理文件将文件另存为时,选择uft-8编码
最后总结:如果是个别bat文件执行使用方法2和方式4,如果代码执行则使用方法1和方法3。这里强调一下,系统环境编码一定要和字符串编码一致。
如果你觉得有用请点赞,让更多遇到困难的兄弟看到。
版权归原作者 hvac_011 所有, 如有侵权,请联系我们删除。