工具程式

完整的維運工具鏈

STK 系統周邊工具的詳細用法、參數與範例。適用系統管理員與 IT 維運人員。

工具總覽

周邊工具程式

1INI_Editor 系統參數設定工具

圖形化編輯 STK 系統跨工作站的設定檔(System.ini / stk.ini / stk_agent.ini),統一管理螢幕、列印、OCR 等設定,並可切換站台個別設定。

執行方式
INI_Editor.exe          # 雙擊執行,無需參數
主要參數 / 設定
分類參數預設說明
螢幕FontNameDFKai-SB顯示字型(需支援 BIG5),如標楷體/微軟正黑體
螢幕Rows / Cols0螢幕行列數,0=自動偵測
螢幕AutoFitScreen01=載入後自動填滿高度並套用寬度%
螢幕AutoFitWidthPct80視窗寬度佔螢幕百分比(30~100)
列印PRNMETHOD10=舊式 DosPntGo / 1=新式 PrnAsk
列印PRN_AUTOFMT11=列印 / 2=PDF / 3=Excel / 4=預覽
列印PRN_PAPER9.5x11紙張大小(A4/A3/LA4… L=橫向)
OCRProvider / Modelclaude / haiku貼圖辨識供應商與模型(haiku 快便宜、sonnet 更準)
使用範例

▸ 新建 S001 工作站設定

開啟 INI_Editor.exe
切選「切站」→ 輸入 S001
螢幕:FontName=標楷體、Cols=120、FontSize=14
列印:PRINTER=HP LaserJet、PRNMETHOD=1
按「存檔」→ 設定自動同步到該站

▸ 開啟 Ctrl+V 貼圖 OCR

分類「OCR 圖片辨識」
ApiKey 填 Anthropic 金鑰(建議 ENC: 加密值)
Provider=claude、Model=haiku-4-5
存檔 → 各站下次啟動即可 Ctrl+V 辨識截圖

2stk_uploader 更新派送打包上傳工具

蒐集最新的 EXE/INI/字型/Agent/WebScreen 等,打包成版本化更新包上傳到 FTP 供派發;支援時間戳、大小+時間、內容雜湊(MD5)三種比對模式。

執行方式
stk_uploader.exe        # PyQt5 圖形界面
build_uploader.bat      # 重新編譯 exe
主要參數 / 設定
欄位說明範例/預設
版本版本識別碼YYYYMMDD_HHMM(自動帶入)
比對方式上傳策略時間戳 / 大小+時間 / MD5(內容變才傳) / 強制重傳
蒐集來源各模組來源目錄(可記憶)HBSTK / PRNASK / SOCKET / WebScreen / TOOLS
打包群組勾選要打包的內容EXE(Stk32/PrnAsk/字型/INI) / SET / TOOLS / SOCKET
標為穩定版同時更新 stable 標籤預設只更新 latest
備註版本說明(選填)如「修復 OCR / 加寬欄位」
使用範例

▸ 打包一般更新(時間戳模式)

版本欄自動帶 YYYYMMDD_HHMM
蒐集來源:全部預設
勾選群組:EXE / SET / TOOLS / SOCKET
比對方式:時間戳
點「開始打包並上傳」→ 自動收集/組包/上傳 FTP

▸ 增量上傳(MD5 模式)

比對方式:內容雜湊(MD5)
對比 .upload_hashes.json 舊雜湊
Stk32.exe 二進位未變 → 略過上傳(省流量)
新增或改檔 → 才計算新雜湊並上傳

3stk_updater 工作站自動更新程式

主機端自動從 FTP 下載最新更新包並派發到各工作站,管理關閉倒數、版面合併(SET)、自我更新等全流程,結尾以紅/黃/綠三態顯示成功或失敗原因。

執行方式
stk_updater.exe --list                 # 列出可用版本
stk_updater.exe --channel stable        # 更新到穩定版
stk_updater.exe --colortest             # 測試終端顏色
主要參數 / 設定
參數/設定預設說明
--list—列出 FTP 上所有版本(時戳、stable/latest 標籤)
--channelstablestable=穩定版 / latest=開發版 / 特定時戳
--no-prompt—非互動(排程/遠端觸發),自動用穩定版
--colortest—測試終端 VT100 上色是否正常
STK_ROOTC:\STK主機 STK 工作目錄(ini 設定)
STATION_FROM/TO1 / 20派發範圍(S001~S020)
timeout120關閉倒數秒數
使用範例

▸ 列出版本並更新

stk_updater.exe --list
 [1] 20260910_143022  [stable][latest]
 [2] 20260909_090000
stk_updater.exe --channel 20260910_143022

▸ 自動更新到最新穩定版

stk_updater.exe --channel stable --no-prompt
① 廣播關閉 → 各站退出 STK32
② FTP 下載版本包 → 派發到各站
③ updater 自我更新(WatchDog 管理換版)
④ 廣播 SYNC_NOW → 各站秒級生效
⑤ 顯示成功/失敗摘要(三態顏色)

4Stk_Agent 背景代理:遠端桌面 / 更新 / 備份

工作站背景常駐程式,負責遠端桌面畫面推流、與中繼心跳/命令、錯誤自動上傳、W:↔C: 檔案同步、每日自動備份。A/B 兩份互為備援自動切換。

執行方式
install_agent.bat            # 互動安裝/更新/自癒
install_agent.bat /silent    # 靜默更新(派發用)
install_agent.bat /selfheal  # 自癒(修復保活/排程)
主要參數 / 設定
分類參數預設說明
AgentSTATION_NAMES001工作站識別碼
AgentTOKENstk2026認證令牌(中繼必驗)
AgentHEARTBEAT_INTERVAL30心跳頻率(秒)
同步SYNC_SEC600W:↔C: 自動同步間隔(秒)
遠端RDP_FOLLOW01=遠桌進 RDP 桌面(共看用)
備份BACKUP_ENABLE / HOUR0 / 21=啟用每日備份 / 時間(凌晨 2 點)
虛擬螢幕VIRTUAL_MONITOR01=自動裝虛擬顯示器(共用螢幕站)
使用範例

▸ 標準工作站安裝

install_agent.bat → 選 1 新裝
Station code: S001  /  STK Path: W:\S001
→ 複製 EXE、生成 ini、建排程、啟動 Agent
→ 無須重開機,後續派送自動更新

▸ 共用螢幕站 + 自動備份

VIRTUAL_MONITOR=1  (開機自動裝虛擬顯示器,避免共用螢幕被關導致遠端黑畫面)
BACKUP_ENABLE=1 / BACKUP_HOUR=2 / BACKUP_DEST=D:\Backup

5StkCommander 指揮台 — 多站批量操作端

PC 操控端,連中繼後可對多個工作站批量執行遠端命令、下載截圖、觸發同步、查看狀態與日誌,是遠端維運的中央控制台。

執行方式
Stk_Commander.exe        # 圖形界面
主要參數 / 設定
參數預設說明
TOKENstk2026認證令牌(需與代理/中繼一致)
RELAY_HOSTasiaware.tplinkdns.com中繼連線地址
RELAY_PORT9530中繼埠
SCREENSHOT_DIRC:\TEMP下載截圖的本機儲存目錄
使用範例

▸ 批量更新代理

連中繼 → 顯示所有線上工作站
勾選 S001,S002,S003(Ctrl+Click)
遠端執行:install_agent.bat /silent
→ 三站並行更新,無須重開機

▸ 檢查工作站狀態

列表:S001 LastHB=2s(正常)/ S005 離線(紅)/ S010 有更新待套用
點 S005 → 查日誌 → 診斷網路/授權問題

6StkWebScreen 網頁遠端桌面

網頁版遠端桌面,平板/手機/筆電只用瀏覽器就能看與操控工作站畫面。操控頁延遲 <1 秒(H.264),純看頁走 HLS。以 KMSN 與密碼二層隔離,決不洩漏其他客戶站台。

執行方式
Stk_WebScreen.exe        # 生產版
start_webscreen.bat      # 快速啟動
瀏覽器開 http://橋接機IP:8080
主要參數 / 設定
參數預設說明
relay_host / port… / 9530中繼連線(取決代理推流來源)
tokenstk2026中繼認證令牌
kmsn(必設)限定 KMSN(未設看不到任何站)
stations(空=全部)允許站台清單(再限縮)
password(選填)網頁登入密碼(重啟即登出)
web_port8080瀏覽器連線埠
cert_file / key_file(選填)HTTPS 憑證(對外部署用)
使用範例

▸ 部署遠端操控

stk_webscreen.ini:
  kmsn=1234-5678-01-01
  stations=S001,S002,S003
  password=abc123
Stk_WebScreen.exe → 裝置開 http://橋接機IP:8080
輸入密碼 → 選 S001 → 操控頁 /m 實時操控(<1s)

▸ HTTPS 外網部署

配置 cert_file / key_file(Let's Encrypt)
web_port 對外(8443)
開 https://公網IP:8443 → 密碼登入 → 操控
安全:密碼 + KMSN 二層限制,列表與連線都過濾

7relay_server 中繼伺服器

中樞交換機:代理連入登錄,指揮台/網頁遠端讀取線上工作站清單,轉發命令(關閉/結束 STK/同步)給各代理,聚合心跳與狀態。

執行方式
install_relay.bat        # 安裝為 Windows 服務
start_relay.bat          # 手動啟動/測試
主要參數 / 設定
參數預設說明
LISTEN_PORT9530中繼監聽埠
TOKEN(選填)認證令牌(設了就強制驗)
RELIABLE_MSG11=可靠傳訊(帶 ID+回執確認)/ 0=舊模式
cf_ddns.exe—動態 DNS(relay.asiaware-stk.com 追 IP)
使用範例

▸ 部署中繼服務

install_relay.bat(提升權限,安裝成服務 STK_Relay)
net start STK_Relay
→ 監聽 9530,代理/指揮台連入自動登錄

▸ 命令廣播流程

指揮台發「關閉」→ 中繼轉發給 S001~S020
→ 各代理在本機建關閉旗標
→ STK32 定期檢查後倒數退出 → 回傳確認

8prn2xlsx 報表轉 Excel

把文字報表(含印表機控制碼、等寬欄位)轉成格式化 .xlsx:自動偵測欄位邊界、多頁合併、型別推斷(數字靠右/文字靠左/料號強制文字),開檔即用。

執行方式
prn2xlsx.exe <input.prn> [output.xlsx]
主要參數 / 設定
參數說明
input.prn來源報表檔(BIG5,含控制碼)
output.xlsx目標 Excel(可省略,預設同名)
使用範例

▸ 基本轉換

prn2xlsx.exe report.prn
→ 生成 report.xlsx(表頭深底白字、資料斑馬紋、小計突顯)

▸ 多頁採購單自動合併

來源:表頭→頁1→表尾→表頭→頁2→表尾
結果:留首表頭 → 合併頁1+2 → 只留末表尾
料號欄自動強制文字,避免「001」變成 1

9img2text 貼圖 OCR 辨識

Ctrl+V 貼圖辨識引擎:貼上截圖後自動 OCR(雲端 Claude/Gemini/OpenAI 或本機 Tesseract),把文字貼回欄位。支援多供應商備援與離線模式。

執行方式
img2text.exe --encrypt "金鑰"      # 加密 API 金鑰
img2text.exe --doc templates.json  # 名片/證件結構化辨識
img2text.exe --colortest           # 測試雲端連線
主要參數 / 設定
參數預設說明
Providerclaude主供應商(claude/gemini/openai)
Modelhaiku-4-5haiku=快便宜 / sonnet=更準
ApiKey / ApiKeyFileENC:… / 中央檔金鑰(建議加密);中央檔一處輪替全站生效
Fallbacksgemini,openai主供應商額度用完依序備援
ForceModeautoauto=有網雲端/沒網離線 / online / offline
TessLangchi_tra+eng離線 Tesseract 語言(繁中+英)
使用範例

▸ 雲端辨識 + 備援

Provider=claude / Model=haiku-4-5
ApiKey=ENC:…(用 --encrypt 產生)
Fallbacks=gemini,openai(額度用完自動切)
Ctrl+V → 剪貼簿有圖 → 0.5~2 秒辨識貼字

▸ 名片結構化 / 離線模式

--doc ocr_doc_templates.json → 依範本萃取(公司/姓名/電話/信箱)輸出欄位
ForceMode=offline + TessLang=chi_tra+eng → 純本機離線,隱私最佳

10UpdRuleEditor 更新規則編輯器

圖形化編輯累積更新規則(UpdRule.json):定義每次版本要做的結構變更、檔案複製、程式權限、欄位變更、版面合併與提醒,無須改程式碼即可派送資料庫層級的更新。

執行方式
updrule_editor.exe       # 圖形界面
主要參數 / 設定
分頁功能說明
結構結構變動列 DBF 別名,用結構檔重建並保留舊資料
複製檔案複製來源 → 目的(DBF/FRM/SET),支援萬用字元
程式檢查權限矩陣對權限檔新增/修改(執/新/改/刪/查/印/複/重算/明細)
欄位內容變更set/copyzero/addrec/builtin(化外函式)
版面合併SET 版面逐筆升級結構、更新內容、保留客戶版面位置
提醒更新後訊息顯示給操作者的人工後續提醒
使用範例

▸ 新增一個版本里程碑

+新增 milestone → 日期 2026.09.10、名稱「新增訂單備註欄位」
[欄位] builtin:UpdStruct,dir:DBF,fields:[{cMemo,C,100}]
[提醒]「已新增訂單備註欄位,請自行測試」→ 存檔

▸ 累積更新模型

發版:uploader 打包 UpdRule.json + 新檔
updater 下載 → 引擎逐里程碑按日期執行
每項冪等(重跑無害),舊客戶自動追上最新結構,不管版本多舊

11recall_main 單據表頭消失救回工具

救回被通用瀏覽器/彙總視窗誤刪、只剩明細(表身)沒表頭的單據。救回原則:只救「有表身無表頭」的孤兒 — 表頭還在(未清檔)就就地復原原始資料;表頭已被清檔(PACK)消失,則從明細反推重建表頭。每筆救回產生 LOG,救回前自動備份,預設只預覽不改檔。

執行方式
recall_main.exe <BAD> <主檔> <明細檔> [<GOOD>] [--nos ..] [--all] [--apply]
recall_main.exe --help          # 顯示完整說明/參數/範例
主要參數 / 設定
參數必填說明
<BAD>是出問題的 dbf 目錄(表頭被誤刪的現況)
<主檔> <明細檔>是如 RECMAIN RECSUB(收款)、PAYMAIN PAYSUB(付款)
<GOOD>擇一出事前的好備份;自動圈出「這次消失」的單(最準,建議)
--nos 單號…擇一沒好備份時,明確指定要救的單號(逗號分隔)
--all擇一所有孤兒(★含歷史舊單,會全部復活,慎用)
--apply—實際救回(先自動備份 .bak);不加=只預覽+出 LOG
使用範例

▸ 用好備份自動救回「這次消失」的表頭

recall_main.exe C:\TEMP\BAD RECMAIN RECSUB C:\TEMP\GOOD          # 先預覽+出 LOG
recall_main.exe C:\TEMP\BAD RECMAIN RECSUB C:\TEMP\GOOD --apply  # 確認後實際救回

▸ 沒好備份,指定單號救回(含已清檔重建)

recall_main.exe C:\TEMP\BAD RECMAIN RECSUB --nos RB50525003,RB50701003 --apply
表頭已被清檔者自動從明細反推重建 → 救回後請重整(REINDEX)該主檔索引

12chk_headbody 主從檔一致性檢查(唯讀)

檢查各單據「主檔(表頭)/明細檔(表身)」配對是否正常,找出兩類異常:「有表頭無表身」(空單或表身誤刪)與「無表頭有表身」(孤兒明細,表頭遭誤刪,常導致掛帳)。涵蓋收款/付款/銷貨/進貨/報價/詢價/採購/訂購/預訂等主從檔,以存活記錄比對。純唯讀,不改任何資料,報告存 BIG5 供記事本開啟。

執行方式
chk_headbody.exe [dbf目錄] [報告輸出檔]
chk_headbody.exe                # 放進 dbf 資料夾直接雙擊(自動查該目錄)
chk_headbody.exe --help
主要參數 / 設定
參數預設說明
dbf目錄exe 所在目錄要檢查的 dbf 資料夾
報告輸出檔dbf目錄\headbody_report.txt報告存檔路徑(BIG5)
關聯鍵自動帳款單=CACCNO;其餘單據=CORDERNO
使用範例

▸ 檢查客戶站資料

chk_headbody.exe C:\TEMP\0046dbf
→ 各單據列出「有表頭無表身」「無表頭有表身」筆數與單號
→ 報告存 C:\TEMP\0046dbf\headbody_report.txt

▸ 搭配救回

先用 chk_headbody 找出「無表頭有表身」的孤兒單號
再用 recall_main 依 GOOD 或 --nos 把表頭救回

13chk_dupacc 收款/付款一單多客戶重號檢測(唯讀)

掃描客戶站 DBF,找出「同一張收款/付款單號被掛到多個客戶」的重號污染單,並用「金額反推」判斷每筆明細真正歸屬,分成四類:A 空殼(可刪空殼表頭)、B 真混合(需人工拆單)、C 污染(需改回正確 cId)、X 待確認(需人工看)。純唯讀,不改任何資料。

執行方式
chk_dupacc.exe [dbf目錄]
chk_dupacc.exe                  # 放進 dbf 資料夾直接雙擊
chk_dupacc.exe --help
所需檔案(dbf 目錄下,缺任一該組即跳過)
組別表頭/明細帳款餘額(金額反推依據)名稱檔
收款組RECMAIN.DBF / RECSUB.DBFCUSACC.DBFCUSTOMER.DBF
付款組PAYMAIN.DBF / PAYSUB.DBFSUPACC.DBFSUPPLIER.DBF

※ 只驗收款可只放收款 4 檔;CUSACC/SUPACC 是判斷歸屬的關鍵,缺了該組即跳過。

主要參數 / 設定
參數預設說明
dbf目錄exe 所在目錄要檢測的 dbf 資料夾(可用網路路徑)
報告輸出dbf目錄\chk_dupacc_report.txt四類明細報告(BIG5)
檢測對象自動收款(RecMain/Sub/CusAcc) 與 付款(PayMain/Sub/SupAcc)
使用範例

▸ 檢測站台重號污染

chk_dupacc.exe \\S001\stk\S001\dbf
→ A空殼=x  B真混合=y  C污染=z  X待確認=w
→ C 類列出「現 cId → 應為 cId」,依此改回正確客戶

▸ 病因背景

2019 轉檔匯入單號重疊 + 編輯時把整張單 cId 強制統一
→ 別客戶明細被污染;本工具用金額反推還原真正歸屬

14StkCommanderWeb 指揮台手機網頁版

用手機瀏覽器就能做桌面版 StkCommander 的維運工作:查線上工作站、推訊息、觸發同步、看截圖;管理者另可結束 STK32、關機、立即備份、遠端執行命令、推設定、RDP 共看四鍵。本身扮演 commander 連中繼,與 WebScreen 同台部署(SERVER)、共用 HTTPS 憑證。三層角色 + KMSN 隔離,危險命令僅管理者可用。可「加到主畫面」當 App(PWA)。

執行方式
start_commander_web.bat        # 或 stk_commander_web.exe(隨 WebScreen 看門狗開機自啟)
手機瀏覽器開 http://<橋接機IP>:8090            (內網)
             https://relay.asiaware-stk.com:8453 (外網 HTTPS,需 NAT 轉發 8453)
主要參數 / 設定 (stk_commander_web.ini)
參數預設說明
relay_host / port… / 9530中繼連線(取線上站清單、轉發命令)
tokenstk2026中繼認證令牌
kmsn(空=全部)空=管理版看所有客戶;填單一 KMSN=客戶專版
admin_password(必設)管理者密碼(看所有站 + 全部命令)
[customers]/[customer_mgr]沿用 WebScreen客戶員工/主管密碼(只看自己 KMSN、只安全命令)
web_port / ssl_port8090 / 8453瀏覽器連線埠(避開 WebScreen 8080/8443)
命令權限
角色可用命令
管理者全部:Ping/狀態/截圖/訊息/同步 + 結束STK/關機/備份/EXEC/推設定/RDP①診斷②拉起③修復④重建
主管 / 員工僅安全命令:Ping、狀態、截圖、推訊息、同步(限自己 KMSN)
使用範例

▸ 手機遠端下命令

手機開 http://<橋接機IP>:8090 → 輸入密碼登入(與 WebScreen 同一組)
點卡片多選工作站 → 點命令按鈕(🔃同步 / 💬訊息 / 📷截圖 …)
→ 結果即時回顯;截圖以彈窗顯示

▸ 部署

stk_uploader 打包 SOCKET 群組 → 隨 webscreen 子目錄派送到 SERVER

15set_uac 遠端 UAC 設定(關閉 / 還原)

遠端設定工作站的使用者帳戶控制(UAC)。關閉(EnableLUA=0)後,WebScreen / Agent 才能操作「提權視窗」(電腦管理、工作管理員、登錄編輯器…);還原則恢復系統預設保護。可由 StkCommander 的「🔓 關閉 UAC / 🔒 還原 UAC」preset 直接遠端呼叫;批次以 BIG5 編碼。

執行方式
set_uac.bat off          # 關閉 UAC(EnableLUA=0)
set_uac.bat on           # 還原 UAC(恢復預設保護)
set_uac.bat off reboot   # 關閉並於 60 秒後自動重開機
(StkCommander → 執行指令 → 選「🔓 關閉 UAC」/「🔒 還原 UAC」)
參數 / 設定
參數作用說明
off關閉 UACEnableLUA=0 + ConsentPromptBehaviorAdmin=0 + PromptOnSecureDesktop=0
on還原 UACEnableLUA=1 / ConsentPromptBehaviorAdmin=5 / PromptOnSecureDesktop=1(預設保護)
reboot(第二參數,選)自動重開機套用後 60 秒重開機;預設不自動重開機
權限需系統管理員未提權會自動嘗試提權(客戶端跳 UAC 確認);或本機對檔案右鍵「以系統管理員身分執行」
★生效必須重開機改完登錄檔後,一定要重開機才生效
重要影響(務必先了解)
項目說明
為何非關不可把 UAC 拉桿調「一律不要通知」沒有用——那只是不彈確認窗,完整性隔離(UIPI)仍在,Medium 權限的 Agent/遠端仍點不進提權視窗。要打通必須 EnableLUA=0(整台以完整管理員權杖執行,UIPI 消失)。
副作用整體安全性下降(管理員程式不再有提權確認);UWP / Windows 市集 App 會無法啟動(EnableLUA=0 的已知副作用)。
替代方案不想降低安全性 → 用 stk_hiinput(High 完整性注入器,不改 UAC 也能操作提權視窗)。關 UAC 是「大鎚」解法。
部署前置由 stk_uploader 隨 Agent 群組派送到各站 socket\\agent\\set_uac.bat 後,Commander preset 才呼叫得到。
使用範例

▸ 讓某站可被遠端操作提權視窗

StkCommander → 勾該站 → 執行指令 → 「🔓 關閉 UAC」
(或該站本機:set_uac.bat off,右鍵以系統管理員身分執行)
→ 重開機生效 → WebScreen 即可點電腦管理/工作管理員

▸ 維護完還原保護

StkCommander → 「🔒 還原 UAC」→ 重開機 → 恢復預設 UAC 防護
完整批次內容(存成 BIG5 編碼的 set_uac.bat)
@echo off

chcp 950 >nul 2>&1

setlocal

REM ============================================================

REM  set_uac.bat - 遠端設定 UAC(供 Commander preset 呼叫)

REM  用法:

REM    set_uac.bat off          關閉 UAC(EnableLUA=0)

REM    set_uac.bat on           還原 UAC(EnableLUA=1,預設保護)

REM    set_uac.bat off reboot   關閉並於 60 秒後重開機

REM  需系統管理員;未提權會自動嘗試提權(客戶端跳 UAC 確認)。

REM  ★改完必須重開機才生效。

REM ============================================================

set MODE=%~1

set DOREBOOT=%~2

if "%MODE%"=="" set MODE=off



REM ---- 提權檢查:未提權則以系統管理員重新啟動自己 ----

net session >nul 2>&1

if not errorlevel 1 goto ELEVATED

echo [提權] 目前非系統管理員,嘗試提權重新執行...

powershell -NoProfile -Command "Start-Process -Verb RunAs -FilePath '%~f0' -ArgumentList '%MODE% %DOREBOOT%'" 2>nul

if errorlevel 1 echo [失敗] 無法提權,請在該站本機對本檔按右鍵「以系統管理員身分執行」。

exit /b



:ELEVATED

set REG=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

if /i "%MODE%"=="on"  goto ON

if /i "%MODE%"=="off" goto OFF

echo [失敗] 未知參數 "%MODE%"(需 off 或 on)

goto END



:OFF

echo ============================================================

echo  關閉 UAC(EnableLUA=0)

echo  作用:整台以完整管理員權杖執行,完整性隔離(UIPI)消失,

echo        遠端/Agent 可操作提權視窗(電腦管理/工作管理員)。

echo  副作用:UWP/市集 App 無法啟動;整體安全性下降。

echo  ★需重開機才生效。

echo ============================================================

reg add "%REG%" /v EnableLUA /t REG_DWORD /d 0 /f

reg add "%REG%" /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f

reg add "%REG%" /v PromptOnSecureDesktop /t REG_DWORD /d 0 /f

echo.

echo [OK] UAC 已設為關閉。★★★ 必須重開機才生效 ★★★

goto END



:ON

echo ============================================================

echo  還原 UAC(EnableLUA=1,恢復預設保護)

echo  ★需重開機才生效。

echo ============================================================

reg add "%REG%" /v EnableLUA /t REG_DWORD /d 1 /f

reg add "%REG%" /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 5 /f

reg add "%REG%" /v PromptOnSecureDesktop /t REG_DWORD /d 1 /f

echo.

echo [OK] UAC 已還原為開啟。★★★ 必須重開機才生效 ★★★

goto END



:END

if /i "%DOREBOOT%"=="reboot" (

  echo [重開機] 60 秒後重開機(取消請執行: shutdown /a)...

  shutdown /r /t 60 /c "STK: UAC setting changed, restarting to apply."

)

endlocal

16stk_fix 現場維護選單(中文操作介面)

給客戶端現場使用的中文選單入口,把「STK 啟動很慢」「連不上更新伺服器」這兩類最常見的現場問題,整理成選號碼就能處理的流程。本身不做事,只負責呼叫 av_exclude.bat 與 net_check.bat,並在需要管理員權限時先擋下來提醒。三支放在同一個資料夾(W:\TOOLS\ 或 toAWI_Home\tools)。

執行方式
在 stk_fix.bat 上按滑鼠右鍵 → 「以系統管理員身分執行」
(只做診斷(項目 1、2)時不需要管理員權限)
選單項目
項目動作什麼時候用
1. 檢查網路連線呼叫 net_check.bat更新程式連不上、Agent 沒上線
2. 檢視防毒排除清單av_exclude.bat(唯讀)先看現況,不會更動任何設定
3. 套用 STK 防毒排除清單av_exclude.bat /applySTK32 / PrnAsk 啟動很慢的標準解法
4. 套用排除 + 掃描改 22:00/apply /scan:22上班時間常被全面掃描拖慢
5. 移除排除清單/remove還原用
6. / 7. 暫停 / 恢復即時防護/rtoff · /rton項目 3 無效時的進階手段,需打 Y 確認
8. 解除安裝 MSE/uninstall /force危險,需輸入大寫 YES;僅限不上網的專用主機
設計重點
項目說明
權限先擋需要管理員的項目會先檢查再執行,沒權限直接提示右鍵以系統管理員身分執行,不會做到一半才失敗。
危險項目雙重確認暫停防護要打 Y;解除安裝防毒要打大寫 YES,且畫面先列出適合/不適合的情境與替代作法。
編碼BIG5 + chcp 950,Win7 中文版顯示正常。

17av_exclude 防毒排除清單設定(治 STK 啟動慢)

把 STK 的目錄、執行檔、資料檔副檔名加進防毒軟體的排除清單,解決「STK32 / PrnAsk 啟動要等好幾秒」的問題。自動辨識系統:Win7 的 MSE 走登錄檔(以 SYSTEM 身分寫入),Win10/11 的 Defender 走 Add-MpPreference。

為什麼需要它(實測數據)

某客戶主機(Win7 + Microsoft Security Essentials)實測,每次開啟 EXE 防毒都會整個重掃一次,而且沒有快取——同一個檔案連讀三次都一樣慢:

讀取對象耗時防毒 CPU 增量
Stk32.exe (7.7 MB)8,605 ms16.1 秒
PrnAsk.exe (8.2 MB)4,822 ms12.3 秒
Parts.DBF (60 MB)12 ms0.0 秒(不掃)

同一顆 SSD、寫入速度 242 MB/s、SMART 正常 —— 拖慢的不是硬碟也不是網路,就是防毒的即時掃描。套用排除清單後啟動即恢復正常。

執行方式
av_exclude.bat                    # 只報告,不更動任何設定(預設)
av_exclude.bat /apply             # 寫入 STK 排除清單
av_exclude.bat /apply /scan:22    # 同時把排程全面掃描改到 22:00
av_exclude.bat /apply /extra:E:\ConvertFW   # 另外多排除一個資料夾(開發機用)
av_exclude.bat /remove            # 移除排除清單(還原)
av_exclude.bat /rtoff             # 暫停即時防護
av_exclude.bat /rton              # 恢復即時防護
av_exclude.bat /uninstall /force  # 完全解除安裝 MSE(危險)
排除內容
類別內容
資料夾C:\STK W:\ C:\StkAgent C:\TEMP
額外資料夾用 /extra:<目錄> 可再加一個資料夾(只吃一個,寫多次以最後一次為準)。開發機常用 /extra:E:\ConvertFW;路徑含磁碟代號的冒號沒問題。
執行檔Stk32.exe PrnAsk.exe Stk_Agent_A/B.exe img2text.exe prn2xlsx.exe stk_updater.exe WatchDog_StkUpdater.exe
副檔名.dbf .cdx .ntx .prn
兩個關鍵技術點(踩過的坑)
問題解法
管理員也不能寫:MSE 會保護自己的登錄檔機碼,直接寫入回 PermissionDenied 不允許要求的登錄使用權,而且舊版工具寫失敗還照印成功訊息。改用 SYSTEM 身分寫入:建立一次性排程工作執行 reg import,跑完立刻刪除。並驗證寫入結果,失敗時改印 MSE 圖形介面的手動設定步驟。
.reg 反斜線沒跳脫:值名稱裡的 \ 必須寫成 \\,否則 "C:\STK" 會被讀成 C:STK ——寫進去了卻完全沒有作用,是最難發現的一種失敗。產生 .reg 時一律把反斜線加倍,實際寫出的是 "C:\\STK"=dword:00000000。
使用範例

▸ 客戶反映 STK 開很慢

1. 右鍵以系統管理員身分執行 stk_fix.bat → 選 3
   (或直接 av_exclude.bat /apply)
2. 完成後把 Stk32 與 PrnAsk 全部關掉再開
   ※ 第一次啟動仍會掃一次,之後就快了

▸ 想先確認現況再決定

av_exclude.bat          # 預設就是唯讀報告,列出目前排除清單與即時防護狀態
關於「直接移除防毒」

Win7 版 MSE 的病毒碼早已停止更新(隨 Win7 終止支援結束),防護力本來就有限,卻仍持續吃效能,因此移除有其道理。但主機通常有網芳分享,一旦中毒會整站遭殃,建議先套排除清單;確定該機不上網、不收信、USB 使用有管控,再考慮移除。

18net_check 連線診斷(更新失敗時第一支)

客戶端連不上更新伺服器時的第一線診斷工具。一次測完 DNS、對外 TCP、區網可達性、防火牆、Proxy、防毒,最後直接印出判讀結論,讓現場人員不必懂網路也知道問題在哪一層。唯讀,不更動任何設定。

執行方式
net_check.bat                  # 直接雙擊即可
net_check.bat > result.txt     # 把結果存檔回傳
檢查項目
段落內容
[1] 電腦 / IP電腦名稱、IPv4、預設閘道、DNS 伺服器
[2] DNS 解析能否解析更新主機名稱
[3] 對外 TCPFTP 21、Relay 9530、WebScreen 8443、外部 1.1.1.1:443、168.95.1.1:53
[4] IPv4 可達性ping 預設閘道、ping HiNet、ping Cloudflare
[5] 防火牆三個設定檔的啟用狀態(讀登錄檔,中文版 Windows 也正確顯示)
[6] ProxyIE Proxy 與 WinHTTP Proxy 設定
[7] 防毒已安裝的防毒軟體
[8] 區網細節DHCP 或固定 IP、子網路遮罩、ARP 表、自動試 .1 / .254 / .250 找出真正的路由器
判讀對照(工具會自己印出來)
結果結論
全部 TCP 失敗 + ping 閘道成功路由器對外斷線(PPPoE 掉線)或 IPv4 路由異常
全部 TCP 失敗 + ping 閘道也失敗區網層問題:網路線、交換器,或 IP/閘道設錯 → 看第 [8] 段
443 通,但 STK 的 21 + 9530 不通防火牆或防毒擋住我們
443 + 9530 通,只有 21 不通ISP 或路由器封鎖 FTP 的 21 埠
全部正常網路沒問題,要往別的方向查
現場實例

某客戶主機所有對外連線全部逾時,但 DNS 卻查得到 —— 因為 DNS 是靠 IPv6 回應的,IPv4 其實整個不通。第 [4] 段顯示連自己的閘道都 ping 不到,判定為 IP/閘道設定錯誤(換過路由器但固定 IP 沒改),而非我方伺服器或防火牆問題。這類「看起來有網路」的情況,最容易被誤判。

19fix_iconcache 圖示快取重建(程式更新後圖示還是舊的)

程式已經換成新版,但檔案總管、桌面或 W: 磁碟看到的圖示還是舊的。這不是更新失敗,是 Windows 把圖示記在自己的快取檔(IconCache.db)裡,之後就不再去讀檔案了。這支工具把快取檔刪掉並重啟檔案總管,讓 Windows 重新去讀。

執行方式
fix_iconcache.bat              # 雙擊執行:先列出要刪的檔案,再問你要不要繼續
fix_iconcache.bat /y           # 不詢問,直接執行
fix_iconcache.bat /y /thumbs   # 連縮圖快取(thumbcache)一起清
它會做什麼
步驟動作
1列出即將刪除的快取檔與大小
2關閉檔案總管(explorer.exe)工作列會消失約一秒,開著的檔案總管視窗會被關掉
3刪除 IconCache.db 與 iconcache_*.db(加 /thumbs 才會刪 thumbcache_*.db)
4重新啟動檔案總管,工作列自動回來

只動這幾個快取檔,不會動到任何設定或資料。萬一工作列沒回來:按 Ctrl+Shift+Esc 開工作管理員 → 檔案 → 執行新工作 → 輸入 explorer.exe → 確定。

什麼時候該用
症狀是不是這個問題
更新後圖示沒變,但程式功能確實是新版是 → 用這支
圖示沒變,程式行為也還是舊的不是 → 是更新沒套用,請查更新流程
只有某一個桌面捷徑不對,其他都正常不是 → 那個捷徑自己指定了圖示,把捷徑重建一次
現場實例

stk_updater / stk_uploader 換新圖示後重新編譯並佈署,直接從 EXE 裡把圖示抽出來檢查是新的,但桌面捷徑與 W: 磁碟清單全都還顯示舊圖示。先試 ie4uinit -show 無效 —— 已經被快取住的項目它救不回來,必須在檔案總管關閉的狀態下把快取檔刪掉。跑完這支就正常了。

20fix_shortcut 桌面捷徑修復(被改成 UNC → 改回 W:)

桌面上的 STK32 捷徑原本指向 W:\S00X\STK32.EXE,Windows 有時會拿 .lnk 內的 LinkInfo(UNC 備援)去「修正」目標,把它改寫成 \\S001\stk\S00X\STK32.EXE —— 之後點兩下開不起來或特別慢,最常在重開機之後發生,而且可能整站一起中。本工具把捷徑改回 W: 路徑,並寫入登錄檔政策讓 Explorer 不再自作主張改寫。

執行方式
fix_shortcut.bat              # Windows 10 / 11
fix_shortcut_win7.bat         # Windows 7 / Server 2008 R2 專用
fix_shortcut_win7.bat /silent # 不要最後的 pause(給排程/腳本呼叫)

位置:W:\TOOLS\  與  W:\socket\agent\
權限:一般使用者即可(只修自己的桌面+HKCU);要涵蓋公用桌面與 HKLM 請「以系統管理員身分執行」
生效:執行後請登出再登入(或重開機)
兩個版本的差別(★為什麼需要 Win7 版)
版本修捷徑的做法適用
fix_shortcut.batPowerShell 一行流Windows 10 / 11
fix_shortcut_win7.bat
+ fix_shortcut_win7.vbs
WSH(cscript + VBScript),Win7 內建即可跑Windows 7 / 2008 R2
原版在 Win7 上按了等於沒按:它用 [Environment]::GetFolderPath('CommonDesktopDirectory') 取公用桌面,而這個列舉值是 .NET 4.0 才新增的;Win7 SP1 內建 PowerShell 2.0 跑在 .NET 2.0 CLR 上,轉型當場拋例外 → 整段修捷徑一行都沒跑到,而且不顯示任何錯誤,看起來像「跑完了但沒修好」。Win7 版改用 WSH,沒有 .NET 相依。
做了哪兩件事
步驟內容
① 修捷徑掃使用者桌面與公用桌面的 .lnk,凡目標是 \\server\share\S00X\STK32.EXE 的,改回 W:\S00X\STK32.EXE(工作資料夾一併改)。透過 WScript.Shell 編輯會保留 .lnk 的主控台屬性,所以 STK32 的框線字元不會變亂碼。
② 寫政策鎖LinkResolveIgnoreLinkInfo=1(忽略 .lnk 內的 UNC 備援)、NoResolveSearch=1(目標找不到時不要自己搜尋改寫)、NoResolveTrack=1(關閉分散式連結追蹤)。HKCU 一定寫;有管理員權限時連 HKLM 一起寫。
踩過的坑
問題解法
靜默失效最難發現:Win7 版第一版改用 VBScript 的 RegExp 比對路徑,反斜線跳脫少了一半 → 規則運算式語法錯誤,卻被 On Error Resume Next 吞掉,每台都回報「沒有需要修復的項目」—— 壞掉但不出聲。改用純字串比對(判斷開頭兩個反斜線、最後一段是 STK32.EXE、倒數第二段是 S 開頭英數),完全不用 RegExp,沒有跳脫地雷。
兩個檔案必須成對:BAT 用 %~dp0 找同目錄的 VBS。派送走整個目錄複製,兩檔一定一起到;真的少了 VBS 時會明確印出找不到,並且仍把政策鎖寫完,不會靜默失敗。
使用範例

▸ 客戶說「桌面圖示點了打不開」

1. 先看捷徑內容 → 目標若變成 \\S001\stk\S00X\STK32.EXE 就是這個問題
2. Win10/11 跑 W:\TOOLS\fix_shortcut.bat;Win7 跑 W:\TOOLS\fix_shortcut_win7.bat
3. 登出再登入(或重開機)
   ※ 重複執行安全:捷徑正常時只會回報「沒有需要修復的項目」,不動其他捷徑

21relay_check 站台上線檢查(指揮台看不到某一站時用)

回答「為什麼指揮台 / 網頁遠端看不到這一站」。一次做完三件事:測這台電腦連不連得到中繼伺服器、列出中繼伺服器上目前登記了本公司哪些站台(站號、內網 IP、幾秒前回報)、再跟主機上實際存在的站台目錄比對,直接印出哪幾站沒連上與排查方向。唯讀,不更動任何設定,也不重啟任何程式。和 net_check 搭配:net_check 回答「網路通不通」,relay_check 回答「這一站到底有沒有登記上」。

執行方式
relay_check.exe                    # 直接雙擊:查自己公司的所有站台
relay_check.exe > result.txt       # 把結果存檔回傳(存檔時結束不會停住)
relay_check.exe --nopause          # 給排程/腳本呼叫,結束不等按鍵

位置:W:\TOOLS\relay_check.exe(隨自動更新派送;主機上是 C:\STK\TOOLS\)
權限:一般使用者即可
系統:Windows 7 / 10 / 11
輸出三段
段落內容
[1] 連線測試解析中繼伺服器位址並實際連線,顯示成功與耗時;連不到就直接給結論,不往下查
[2] 已登記的站台中繼伺服器上本公司的每一站:站號、內網 IP、對外 IP、幾秒前回報(超過 90 秒會標示)
[3] 比對與結論主機上有哪些站台目錄,哪幾站沒連上,以及要到那一站檢查什麼
判讀對照(工具會自己印出來)
結果結論
[1] 連線失敗這台電腦連不出去 → 看「預設閘道」「DNS 伺服器」(手動設固定 IP 時最常漏填),或防火牆、防毒擋住
[1] 成功,但某站不在 [2] 的清單到那一站:確認背景代理程式有在跑、它自己目錄的設定檔(C:\StkAgent\S00X\stk_agent.ini)站號與序號正確;改完要重啟代理程式才生效
該站的紀錄檔一直出現「連線失敗」到那一站上再執行一次 relay_check,看第 [1] 段
全部站台都在清單上連線正常;指揮台重新整理清單即可
只看得到自己公司

中繼伺服器上有所有客戶的站台。工具會自動讀出這台電腦的客戶序號,只顯示自己公司的站台,無法查詢其他公司的資料。

現場實例

某客戶的 S003 背景代理程式明明在跑,指揮台卻一直看不到。逐層查下來是三個問題疊在一起:設定檔原本是錯的範本(站號、序號都不對);後來改對的是主機上那份,但代理程式讀的其實是它自己目錄那份;最後這台是手動設的固定 IP,漏填了閘道與 DNS —— 區網、共用磁碟都正常,唯獨連不出去,紀錄裡連線失敗了 140 次。補上閘道與 DNS 後一分鐘內自動連上。這支工具就是把當時的查法固定下來:第 [1] 段直接抓出「連不出去」,第 [3] 段直接列出沒連上的站。

22SmbCache Windows 7 檔案資訊快取調整(Windows 7 工作站專用)

關閉 Windows 7 檔案分享用戶端的三個快取(檔案資訊、目錄內容、找不到的檔案),解決「單據明細剛打進去又看起來消失」這一類症狀。★只要這台工作站是 Windows 7 就應該套用,不論主機是哪個版本。主機自己(資料放在本機、不經過網路)不需要套用。選單式操作,套用與回復都在同一支工具裡,套用前會自動備份登錄檔;條件不符時會拒絕套用並說明原因,而回復在任何版本都可以使用。

來歷與緣由

某客戶的工作站在打報價單時,明細打了四筆、畫面上卻突然只剩兩筆;補打之後又少了兩筆。當場進資料檔查,六筆資料全都在裡面、沒有任何刪除記錄,重建索引後六筆全部出現 —— 資料從來沒有遺失,是程式讀不回來。
奇怪的是同一套程式在 Windows 10 完全正常,而這個環境的前一代系統在同一台 Windows 7 上已經用了近二十年沒出過事。往下追才發現差別在資料庫引擎:新引擎的「記錄總數」是用檔案大小換算的,舊引擎是直接讀檔案開頭記錄的筆數。檔案大小屬於作業系統的檔案資訊,而 Windows 7 的檔案分享用戶端預設會把檔案資訊快取 10 秒 —— 剛寫進去的資料讓檔案變大了,程式卻還讀到十秒前的舊大小,於是以為筆數不夠。

現場數據:打得越快越容易出事

某客戶的環境,把每一次新增明細與 自己上一次新增的時間間隔對照「筆數有沒有真的增加」:

工作站距離上一次新增失敗比例
Windows 7 工作站0 ~ 10 秒8/20 = 40%
10 ~ 30 秒2/20 = 10%
超過 30 秒0/57 = 0%
同環境的 Windows 10 工作站(三台)30 秒內的 115 次0%

打得越快越容易出現,停超過 30 秒就完全不會 —— 與「檔案資訊被快取十秒」的推論一致,這也是為什麼只有打單快的人會遇到。 同一個環境裡的 Windows 10 工作站,在同樣的高風險區間 115 次全部正常。

★更正:主機是 Windows 10 也會發生

這一段原本寫的是 「必須『主機是 Windows 7』而且『工作站也是 Windows 7』兩個條件同時成立」。 這個說法已經被現場證據推翻,我們在此更正。
2026-10-06,另一個客戶的環境留下了完整的事故紀錄:

時間發生什麼
15:10:45Windows 10 主機在一張報價單寫入第 3 筆明細,占用了某一筆記錄
15:11:47同公司一台 Windows 7 工作站新增別張單的明細, 它算出來的「檔案目前有幾筆」是過期的, 於是新增動作落在同一筆記錄上,把主機剛寫入的那筆內容清成空白
結果主機的操作者看著自己剛打好的那一行變成一條空白列

所以決定因素是「這台工作站是 Windows 7」, 主機是哪個版本只影響發生的頻率,不影響會不會發生。
而且被害的不一定是出問題的那台 —— 任何人的單據都可能被洗掉,包括主機。 這也是為什麼工具的判斷改成「只要這台是 Windows 7 工作站就套用」。

機制(推論,尚未直接量測證實)

程式算「檔案目前有幾筆」是用檔案大小換算的, 而檔案大小屬於作業系統的檔案資訊。Windows 7 的檔案分享用戶端會把它快取起來, 因此可能拿到過期的筆數,讓新增的那一筆寫到別人剛寫過的位置上。 在工作站關掉這個快取等於繞過它。 這是目前最合理的解釋,我們沒有抓封包直接證實,所以標明為推論。

執行方式
在檔案上按右鍵 > 以系統管理員身分執行

位置:W:\TOOLS\SmbCache.bat(隨自動更新派送;主機上是 C:\STK\TOOLS\)
權限:★必須系統管理員
系統:★僅適用 Windows 7 / Server 2008 R2
生效:★必須重新開機
選單
項目作用
1. 套用修正三個快取時間設為 0。套用前自動把整個登錄檔機碼匯出備份;備份失敗就不做任何修改。這台不是 Windows 7、或資料放在本機(這台就是主機)時,此項停用
2. 回復原狀從備份還原。任何 Windows 版本都可以使用 —— 若某台曾被誤套用,正是最需要解除的那台
3 / 4重新顯示目前設定 / 列出備份檔
注意事項

這三個設定值原本並不存在(Windows 使用內建預設:檔案資訊與目錄 10 秒、找不到的檔案 5 秒),所以「回復」是把它們刪掉回到未設定狀態,而不是填回 10。
條件不符的機器請不要套用:主機不是 Windows 7、或這台工作站不是 Windows 7、或這台的資料本來就放在本機(例如主機自己),改了都不會解決任何事,反而會讓所有檔案存取失去快取、拖慢整台機器。工具本身已經會擋,這裡再提醒一次。
要補充的是:這三個設定值在 Windows 10 一樣存在、預設值也相同。我們沒有證據說新版的用戶端不快取檔案資訊,只有「在上述環境裡沒有出事」的觀測結果 ——所以這裡不寫成「新版沒有這個問題」。

工具怎麼判斷該不該套用

只有兩道關卡,主機是什麼作業系統只會顯示出來,不參與判斷:

關卡判斷
1這台不是 Windows 7 → 拒絕。並提醒:若這台是主機而公司裡有 Windows 7 工作站,要套用的是那些工作站
2讀本機各站設定檔的資料目錄;資料放在本機(不經過網路) → 拒絕,因為檔案分享用戶端根本不在存取路徑上
通過= Windows 7 工作站 → 可以套用。畫面上會直接寫出判定結果,操作者不必自己推斷
驗證進度

「不改就會出事」已經有充分的現場數據(上表)。「改了就不再出事」這一半還在驗證中:某客戶的一台 Windows 7 工作站已於 2026-10-06 上午套用並重新開機,之後在高風險區間(間隔 30 秒內)的 12 次新增全部正常,而套用前同一台在同樣區間是 40 次中 10 次失敗。
12 次零失敗把「其實沒有效果」的機率壓到約 0.2%,方向明確但還不是定論,我們會持續累積。套用後請回報結果。

23CleanEmptyDbf 清除資料檔裡的空白記錄

把資料檔裡「所有欄位都是空值」的無效記錄標記為已刪除,讓它們不再出現在任何查詢與報表。預設是檢查模式(只報告、不修改);正式執行前會先完整說明功用與前提、要操作者確認兩次,並自動備份。

來歷與緣由

某客戶的報價單明細檔裡累積了一批完全空白的記錄。成因是本公司 10/03 為了防止「新增失敗卻覆蓋上一筆」而加的一段保護,不慎讓每筆明細多做了一次新增動作 —— 10/05 已修正,但這段期間留下的空白記錄仍在檔案裡。這些記錄不影響帳務金額,卻會讓筆數對不上、也讓後續的對帳檢查一直報警,因此做了這支工具把它們清掉。

做法:標記刪除,不做壓縮
項目說明
只改刪除旗標只改每筆記錄的第 1 個位元組。記錄編號完全不變,索引仍然有效,不需要重建索引,檔案大小也不變
可以還原真的誤刪可以用一般的「取消刪除」還原
★不做壓縮壓縮(實體移除)會讓記錄編號全面位移,所有既有索引立刻指錯而且不會當機 —— 是無聲出錯,風險遠大於收益,所以刻意不做
執行方式
直接雙擊 CleanEmptyDbf.exe,照選單操作:

  1. 從本機站台資料目錄選檔     <-- 自動讀各站 stk.ini 的資料目錄設定,
  2. 直接輸入完整路徑               列出該目錄下的 DBF 讓您選號碼
  0. 離開
        選定檔案後
  1. 檢查(只報告,不修改)        <-- 先跑這個
  2. 正式執行(清除空白記錄)
  3. 換一個檔案
  0. 離開

命令列用法仍然保留:
  CleanEmptyDbf.exe  C:\STK\s001\dbf\QuotSub.DBF            # 檢查
  CleanEmptyDbf.exe  C:\STK\s001\dbf\QuotSub.DBF  --apply    # 正式執行

位置:W:\TOOLS\CleanEmptyDbf.exe(隨自動更新派送;主機上是 C:\STK\TOOLS\)
權限:對該資料檔要有寫入權
系統:Windows 7 / 10 / 11
紀錄:每次動作會在 exe 同目錄的 CleanEmptyDbf.log 留一行
三個數字:把「已經做過」和「沒作用」分開

每次檢查都會印出總記錄數、已標記刪除筆數、待處理的空白記錄筆數。 待處理是 0 的時候,它會明確說「這個檔案已經是乾淨的」,並指出檔案裡已經有幾筆標記刪除的記錄、 同目錄若有備份檔就是上次執行留下的 —— 因為「已經清過了」與「這次沒作用」在舊版畫面上長得一模一樣, 現場就真的誤判過一次。
另外要提醒:用資料檔檢視工具去看時,若設定成顯示已刪除記錄, 那些清掉的空白記錄仍然會出現在畫面上 —— 本工具是標記刪除,不做實體移除,這是刻意的設計。

動作前先驗檔頭

掃描之前會先檢查這是不是結構合理的 DBF:版本代碼、記錄長度、 各欄位長度總和與檔頭記錄長是否相符、檔案有沒有被截斷。不通過就直接拒絕並說出原因, 不會「掃出 0 筆」然後回報檔案乾淨。

正式執行前的兩道確認
順序內容
① 事前說明先完整說明這支程式的功用、會做什麼與不會做什麼、以及執行前提(全站已退出、已另外備份、指定的是資料檔而非索引檔),並顯示檔名與大小,確認後才繼續
② 筆數確認掃描後報告「待標記刪除 N 筆」與記錄編號範圍,要打字輸入 YES 才真的寫入
自動備份寫入前先把原檔複製一份到同目錄(與您自己的備份無關,雙保險)
無法互動時若在沒有鍵盤輸入的環境執行(排程、導向),一律視為取消,絕不會自行往下寫入
寫入後自我驗證

寫完會重新讀一次檔案並印出:總記錄數是否與原本相同、已標記刪除幾筆、是否還有殘留的空白記錄(應為 0)、檔案大小是否未變。不是只回報「完成」。

24print_queue_fix 列印佇列清除工具

清除卡住的列印工作,以及刪了卻一直還在的印表機。全部用選單選號碼操作:先列出每台印表機的狀態與卡住的工作數,選好印表機、確認後才動手;最後手段的「強制清除」也是把暫存檔搬到備份資料夾,不直接刪除。也能檢查印到主機分享的印表機時「存取被拒」(這台以訪客身分連線),並幫這台存入主機帳密。

什麼時候用
現象原因建議選項
列印工作卡在佇列,顯示「錯誤」,後面的工作全部排隊印不出來第一個工作送不出去(印表機離線、連接埠指錯、主機共用名稱改過…),後面的都在等它先 1 看狀況,再 3 取消
取消後工作停在「正在刪除」,一直不消失列印服務還抓著這個工作正在送的資料5 重新啟動列印服務
在 Windows 刪除印表機後,印表機還在,狀態「等待刪除」,重新開機也一樣Windows 要等佇列裡的工作印完才真正刪除;工作送不出去就永遠刪不掉3 取消 → 5 重啟;或直接 7 移除
STK32 的列印視窗、Ctrl+P 一直看到已經刪除的印表機同上,Windows 本身還把它列為印表機同上
3、5 都做了還是清不掉佇列暫存檔損壞6 強制清除
印表機接在主機、分享給工作站;只有某幾台印不出來(工作全部卡在佇列),同一台的 W: 磁碟卻正常這台沒有存主機的帳密,以訪客 (Guest) 身分連到主機;訪客可以讀檔案分享,但寫入印表機分享被拒(錯誤碼 5)8 檢查 → 9 存入主機帳密 → 重新開機 → 4 清掉舊工作
來歷與緣由

2026-10-12 某客戶工作站修好列印(詳見〔錯誤修正〕同日條目)之後,被刪除的兩台印表機一直停在「等待刪除」,STK32 也一直看得到。原因是它們的佇列裡卡著幾張永遠送不出去的工作 —— 清掉這些工作、重新啟動列印服務之後才真正消失。當時是請現場人員逐行輸入指令完成的,所以把這套步驟做成這支工具,現場只要照選單按數字即可。

2026-10-16 加入選項 8、9:另一家客戶的某台工作站印不出來,工作全部卡在佇列,其他工作站都正常。遠端檢查發現各台都是印到主機分享的同一台印表機,差別在於能印的工作站都存了主機帳密、以主機帳號連線;印不出來的工作站沒存,以訪客身分連線,主機拒絕寫入印表機(Windows 列印事件 372「錯誤碼 5 存取被拒」)。另一台被認為正常的工作站其實也卡了 3 筆。選項 8 會直接列出這些差異並給判定,選項 9 讓現場自己存入帳密。

執行方式
在檔案上按右鍵 → 以系統管理員身分執行,之後全部用數字鍵選擇:

  1. 檢視所有印表機的狀態與卡住的工作數
  2. 檢視某一台印表機的工作明細
  3. 取消某一台印表機的全部工作
  4. 取消所有印表機的全部工作
  5. 重新啟動列印服務 (Print Spooler)
  6. 強制清除列印暫存檔 (3、5 都清不掉時才用)
  7. 移除印表機 (會先取消它的工作)
  8. 檢查連到主機分享印表機的身分 (是不是以訪客 Guest 連線被拒)
  9. 存入主機帳密 (讓這台以主機帳號連線,解決「存取被拒」)
  0. 離開

選 1 時的畫面(← 表示有工作卡在佇列裡,或狀態不是「正常」):

  編號  工作數  狀態          印表機名稱
  ----  ------  ------------  ------------------------------
     1       0  正常          \\S001\Epson LQ-680C
     2       1  錯誤          Epson LQ-680C (S002)  ←
     3       3  等待刪除、錯誤 Epson LQ-680C  ←

選 2、3、7 會先列出上面的清單,輸入編號選印表機;
選 3~7 會先顯示要處理的對象,再選「1. 確定執行 / 2. 取消」才動手。

選 8 會列出:這台印到哪些主機分享的印表機、每台主機有沒有存帳密
(沒存會標「← 會以訪客 (Guest) 身分連線」)、最近 14 天印不出來的紀錄與錯誤碼,
最後一行給判定與下一步;在主機上執行時,另外列出每台工作站連進來用的帳號(訪客標 ←)。

選 9 依序輸入:主機名稱(直接按 Enter = 選 8 偵測到的主機)、帳號(只打 user
會自動補成 主機\user)、確認、密碼輸入兩次(畫面不顯示)。存完會讀回確認,
接著:重新開機 → 選 8 確認變成「有」→ 選 4 清掉卡住的舊工作 → 印一張測試。
★ 選 9 要用平常印東西的那個 Windows 使用者執行(畫面會顯示存在哪個使用者底下);
  若按「以系統管理員身分執行」時要求輸入別的管理員帳號,帳密會存到那個帳號,
  這時請改用「控制台 → 認證管理員」手動新增。

位置:W:\TOOLS\print_queue_fix.bat(隨自動更新派送;主機上是 C:\STK\TOOLS\)
權限:系統管理員
系統:Windows 7 / 10 / 11
安全設計
項目說明
先看再動選 3~7 都會先列出要處理的印表機與工作,再選「1. 確定執行 / 2. 取消」
只動這台電腦取消工作、移除印表機都只作用在執行這支工具的電腦,不會動到主機或其他工作站的印表機
強制清除不刪檔選 6 時佇列暫存檔是搬到工具旁的 print_queue_backup\日期時間 資料夾(放不了就放到暫存目錄)
不改設定不修改印表機驅動程式、連接埠、共用名稱或預設印表機;唯一會新增設定的是選 9,把主機帳密存進這個 Windows 使用者的「認證管理員」,已有舊帳密會先提示將被取代
密碼不落地選 9 的密碼輸入時不顯示、要輸入兩次相同,只交給 Windows 認證管理員保存,不寫進任何檔案或紀錄;選 8 只讀取,不改任何東西
清不掉會說取消後會重新計算剩下幾個工作;移除後若印表機還在,會明確提示改用 5 或 6,不會只回報「完成」
不用工具時的手動指令
# 以系統管理員身分開啟 PowerShell,依序執行(印表機名稱請換成實際名稱)

# ① 看哪一台卡住:狀態有 PendingDeletion(等待刪除)或 Error,就是它
Get-Printer | ft Name,PrinterStatus,JobCount -auto

# ② 看卡住的工作(JobStatus 常見:Error、Deleting = 正在刪除)
Get-PrintJob -PrinterName 'Epson LQ-680C' | ft Id,DocumentName,UserName,JobStatus,SubmittedTime -auto

# ③ 取消這台的全部工作
Get-PrintJob -PrinterName 'Epson LQ-680C' | Remove-PrintJob

# ④ 工作停在「正在刪除」消不掉:重新啟動列印服務
Restart-Service Spooler -Force

# ⑤ 還在:強制清除(停服務 → 把佇列暫存檔搬走 → 啟動服務)
Stop-Service Spooler -Force
md C:\print_queue_backup -Force
Move-Item C:\Windows\System32\spool\PRINTERS\* C:\print_queue_backup -Force
Start-Service Spooler

# ⑥ 要刪掉的印表機:工作清空後再移除
Remove-Printer -Name 'Epson LQ-680C'

# Windows 7 沒有 Get-Printer / Get-PrintJob,可改用:
#   net stop spooler
#   move C:\Windows\System32\spool\PRINTERS\*.* C:\print_queue_backup\
#   net start spooler

需要工具操作教學?

我們提供完整的維運工具與教學支援,協助您順利部署與管理。

聯絡我們