学习unigui【39】单独文件在ms win server 上执行的坑
exe直接复制到ms windows server的目录下执行,ok没问题。由于要读取ini配置文件。导致出现莫名其妙的错误。
明明ini参数调整了,还是执行出问题,让你怀疑人生。
坑1:自带记事本保存的 UTF-8 文件默认会加上 BOM (Byte Order Mark)的文件格式,当你保存后,实际上就是一个人妖。
FireDAC 的 INI 解析器(TMemIniFile
/ TFDIniFile
) 并不会自动去掉 BOM。结果是:文件第一行前 3 个隐藏字节(EF BB BF)被当成 section 名的一部分。
特别是ini中包含中文是,比如 【水务】,记事本看起来没有问题,程序真正读出来的是乱码,根据该编码再去配置就会出现问题。
✅ 根本原因:
Windows 记事本保存 UTF-8 时添加 BOM,而 FireDAC 不支持带 BOM 的 INI。
✅ 正确做法:
用 Notepad++ 或 VS Code等 保存成 UTF-8 (无 BOM)
。
✅ 验证:
打开文件 → 菜单 “编码” → 选择 “转换为 UTF-8 无 BOM”,保存即可。
坑2:像 UniGUI、DataSnap、Indy 服务器、甚至 FireDAC 物理层,如果你连续调试多次、上次的进程没退出(还在监听 5433 / 8081 / 8077 之类的端口), 新的实例启动时就会报:
Could not bind socket [FireDAC][Phys][PG][libpq] could not connect to server: Connection refused (10061)
✅ 根本原因:
TCP 端口已被旧进程占用。
Windows 处于 LISTENING
或 TIME_WAIT
状态。
✅ 解决方式:
或者用:
彻底清空旧实例。
✅ 再启动服务端 → socket 绑定成功 → FireDAC 可正常连接。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/940141.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!