‧ 現象(客戶 [0028] 各台「直接列印」的電腦、[0046] S002、[0081] S004):每天早上開機後,第一次進 STK、印第一張銷貨單(出貨單)之後,畫面停在下一張單頭的提示框,按鍵盤、點滑鼠都沒有反應;視窗標題沒有出現「沒有回應」;只能從工作列按右鍵把 STK 關掉再重開,重開後當天再印都正常。
‧ 發生條件:Windows 10(21H2 以上)或 Windows 11,且列印設定為「不詢問、直接列印」(列印時由 STK 自己把資料送到印表機)。設定為「列印前先詢問」的電腦(列印交給列印小幫手 PrnAsk)沒有發生,例如 [0007] 的三台 Windows 11 電腦。
‧ 鑑別方法(卡住當下遠端實測):(1)STK 其實沒有當機:Windows 判定它「有回應」、CPU 使用幾乎為 0、正在等待按鍵;(2)鍵盤焦點、最前面的視窗都是 STK 自己,沒有被別的程式搶走;(3)用遠端模擬實際按 ESC、方向鍵、點選單都沒反應,但把 ESC「直接投遞」給 STK 視窗,STK 立刻回到主選單 → 證明 STK 本身正常,是 Windows 把實體鍵盤滑鼠的輸入擋在 STK 外面;(4)第一次列印後,STK 程式裡多了 Windows 10/11 新版列印元件(Print.PrintSupport、CoreMessaging),而 Windows 的 32 位元列印轉接程式(splwow64)正是由 STK 在第一次列印時叫起的。
‧ 已排除的可能:輸入法吃掉按鍵(關閉輸入法仍無效)、按鍵卡住、焦點被搶、視窗被停用、把視窗縮小再還原、畫面重繪設定、印表機名稱錯誤、列印佇列卡件、資料鎖定等待,都已逐一實測排除。
‧ 根因:在 Windows 10(21H2 以上)與 Windows 11 上,開機後第一次列印時如果由 STK 在自己程式內直接列印,Windows 新版列印元件會掛進 STK 的主執行緒,之後實體鍵盤滑鼠就送不進 STK。已受影響的 STK 無法自行恢復,只能重開;同一次開機內之後再印不會再發生,所以症狀是「每天第一次」。
‧ 補充:Windows 10 也會(2026-09-15):客戶 [0081] S004 為 Windows 10 21H2,同樣發生「印完畫面不動、關掉重開才能印」;遠端檢查同樣是 STK 在第一次列印時叫起 Windows 的 32 位元列印轉接程式,STK 程式裡也同樣載入這組列印元件(Print.PrintSupport、CoreMessaging),確認不限 Windows 11。同一家的其他電腦:設定「列印前先詢問」的主機不受影響;同為 Windows 10、設定「直接列印」的 S006 有同樣風險,已列入更新;Windows 7 沒有這組元件。修正方法相同:更新 STK 主程式與列印小幫手。
‧ 解法一:列印改交給列印小幫手(解決畫面不動):原本「直接列印」由 STK 自己送印表機,改為由 STK 叫起列印小幫手 PrnAsk,以參數 /DIRECTPRINT /PRINTER:"印表機名稱" /LOCSYS:"設定目錄" "列印暫存檔" 在另一個獨立程式中列印,印完就自動結束;STK 不再載入 Windows 列印元件,因此不會再被擋住。印表機、紙張、邊界沿用原設定(兩邊共用同一套列印引擎)。列印小幫手新增 /PRINTER: 參數:STK 選印表機時會先看 printer.cfg,而小幫手原本只看 System.ini,兩者可能不同,所以由 STK 直接告訴小幫手要印哪一台。找不到 PrnAsk.exe 時才退回原本由 STK 自己列印。
‧ 解法二(方法2):STK 不等列印小幫手啟動:STK 叫起小幫手時改在背景執行緒啟動(新增 STK_SHELLEXECASYNC,不繼承 STK 的系統資源),STK 馬上回到畫面可以繼續打單;就算小幫手啟動較慢,也只是紙晚幾秒出來,不會擋住操作。STK 內所有叫起小幫手的 6 個地方(直接列印、列印前詢問視窗、預覽)都改用這個方式;背景啟動失敗時才退回原本方式。舊式外部列印程式 dospntgo 與開啟 PDF 的地方不變。
‧ 解法三(方法1):排除防毒軟體的首次掃描:改完後發現開機後第一次列印仍要等約 4 秒才回到畫面。實測時間:STK 送出 21:13:04.672 → 小幫手到 21:13:08.982 才開始執行,列印本身只花 0.5 秒;檢查確認是 Windows Defender 在開機後第一次執行 PrnAsk.exe(約 8MB)時先做完整掃描。加入防毒排除後,同樣情況只等 0.1 秒(22:09:22.516 → 22:09:22.619)。已把 Defender 排除 C:\STK(各站 STK 主程式與列印小幫手)與 C:\StkRdp(遠端共看程式)寫進安裝程式與網路安全設定工具。
‧ 方法1 與方法2 各處理什麼:方法1(防毒排除)讓列印小幫手開機後第一次啟動變快,但每台電腦都要執行設定才生效;方法2(背景啟動)保證 STK 畫面不會被小幫手的啟動時間擋住,不需要每台設定。兩者互補,都已完成。
‧ install_agent.bat(安裝程式)修改:原本只把 C:\StkAgent 與 4 個遠端代理程式加入防毒排除;在同一行排除指令中加入 C:\STK 與 C:\StkRdp,原有排除全部保留,並把完成提示改為「Defender 排除 C:\StkAgent C:\STK C:\StkRdp」。此修改在該台電腦重新執行安裝時生效。
‧ unblock_all.bat(網路安全設定工具)修改:新增 C:\StkRdp 的「清除網路下載標記」步驟(與 C:\StkAgent 相同做法),並加入 C:\StkRdp 防毒排除;原有 C:\STK、C:\StkAgent、\\S001\stk\ 的排除不變。此工具會重新啟動檔案總管、關閉 SmartScreen,最後等待按鍵,建議在現場執行。
‧ 實測結果(客戶 [0028] S001):更新後每次重開機第一次列印都不再卡住,Windows 列印統計皆為 0 錯誤;加入防毒排除後,第一次列印的等待時間由 4.3 秒降為 0.1 秒。
‧ 修改檔案:HBSTK\compat\print_spool.prg(直接列印改交小幫手、背景啟動)、HBSTK\c_code\printer_c.c(新增背景啟動函式)、PRNASK\source\main.prg 與 PRNASK\source\fw_prnout.prg(新增 /PRINTER: 參數)、SOCKET\StkAgent\build\install_agent.bat 與 unblock_all.bat(防毒排除)。另加入診斷用的空閒心跳紀錄(HBSTK\compat\writedebuglog.prg、HBSTK\source\STK.PRG,只在開啟除錯紀錄時運作)。
‧ 升級注意:STK 主程式(Stk32.exe)與列印小幫手(PrnAsk.exe)必須一起更新;PrnAsk.exe 要放在設定 PRNASK_HOME_PATH 指定的目錄(通常是 C:\STK\站號)。只換主程式時,舊版小幫手仍能列印,但無法保證與 STK 選定的印表機一致。