學(xué)習(xí)unigui【39】單獨(dú)文件在ms win server 上執(zhí)行的坑
exe直接復(fù)制到ms windows server的目錄下執(zhí)行,ok沒問題。由于要讀取ini配置文件。導(dǎo)致出現(xiàn)莫名其妙的錯(cuò)誤。
明明ini參數(shù)調(diào)整了,還是執(zhí)行出問題,讓你懷疑人生。
坑1:自帶記事本保存的 UTF-8 文件默認(rèn)會(huì)加上 BOM (Byte Order Mark)的文件格式,當(dāng)你保存后,實(shí)際上就是一個(gè)人妖。
FireDAC 的 INI 解析器(TMemIniFile / TFDIniFile) 并不會(huì)自動(dòng)去掉 BOM。結(jié)果是:文件第一行前 3 個(gè)隱藏字節(jié)(EF BB BF)被當(dāng)成 section 名的一部分。
特別是ini中包含中文是,比如 【水務(wù)】,記事本看起來沒有問題,程序真正讀出來的是亂碼,根據(jù)該編碼再去配置就會(huì)出現(xiàn)問題。
? 根本原因:
Windows 記事本保存 UTF-8 時(shí)添加 BOM,而 FireDAC 不支持帶 BOM 的 INI。
? 正確做法:
用 Notepad++ 或 VS Code等 保存成 UTF-8 (無 BOM)。
? 驗(yàn)證:
打開文件 → 菜單 “編碼” → 選擇 “轉(zhuǎn)換為 UTF-8 無 BOM”,保存即可。
坑2:像 UniGUI、DataSnap、Indy 服務(wù)器、甚至 FireDAC 物理層,如果你連續(xù)調(diào)試多次、上次的進(jìn)程沒退出(還在監(jiān)聽 5433 / 8081 / 8077 之類的端口), 新的實(shí)例啟動(dòng)時(shí)就會(huì)報(bào):
Could not bind socket [FireDAC][Phys][PG][libpq] could not connect to server: Connection refused (10061)
? 根本原因:
TCP 端口已被舊進(jìn)程占用。
Windows 處于 LISTENING 或 TIME_WAIT 狀態(tài)。
? 解決方式:
或者用:
徹底清空舊實(shí)例。
? 再啟動(dòng)服務(wù)端 → socket 綁定成功 → FireDAC 可正常連接。
浙公網(wǎng)安備 33010602011771號