Windows 計劃任務
ok-script 支援把一次性任務(onetime_tasks)註冊為 Windows 計劃任務,
按計劃自動執行。
任務定位機制:-t N
計劃任務通過 -t N 引數定位要執行的任務,其中 N 是 onetime_tasks
列表中的 1-based 索引(例如 -t 1 表示列表第 1 個任務)。
<Arguments>main.py -t 1 -e</Arguments>
任務被建立時,CreateScheduleTaskDialog 用
og.executor.onetime_tasks.index(selected_task) + 1 計算索引並寫入 XML。
索引重排問題
由於定位依賴的是索引而非任務名,一旦 config.py 中 onetime_tasks
的順序發生變化(例如把業務任務前置、測試任務後置),已建立的計劃任務
仍指向舊索引,就會執行到錯誤的任務(例如 -t 15 從「啟動一次遊戲」跑到
TestDemoGraphic)。
啟動時自動校正與穩定標識遷移
為保留 ok 原生 -t 機制、不修改任何執行時解析 / 建立 / 修改對話方塊邏輯,
ok-script 在每次啟動時自動校正並把 -t 目標統一遷移為穩定標識
(模組路徑.類名,如 src.tasks.onetime.DailyTask,對排序免疫):
- 掛載點:
MainWindow.__init__(構造 ScheduleTaskTab、載入任務快取之前,早於start_runtime),原生內聯呼叫 - 實現:
ok/ui/qt/tasks/schedule_index_sync.py(同步邏輯),MainWindow.__init__直接呼叫sync_schedule_task_indexes() - 原理:解析快取任務當前的
-t目標(數字索引 / 歷史任務名 / 模組路徑.類名), 以快取任務名(建立時選擇的任務名,不隨排序變化)或已快取的穩定標識為權威身份, 在當前onetime_tasks中定位目標任務,把-t X統一改寫為當前實際的模块路径.类名;同時回填快取的task_index/task_identifier後設資料。
校正規則:
- 只處理本應用(如
\ok-ef\)下的任務,其它 ok-* 應用的只讀任務不動; - 任務名與穩定標識都無法在當前
onetime_tasks中唯一定位時跳過(可能已被刪除); - 目標與後設資料均已正確時跳過(冪等,不寫快取、不調 COM);僅缺後設資料時只回填 快取,不重註冊 Windows 任務;
- 有變更時同步更新快取 /
xml_config/ Windows 計劃任務 (COMRegisterTaskDefinition,失敗回退schtasks /Create /XML /F); - 改寫本次程序
sys.argv與og.ok.args['task'],保證本次啟動也使用正確目標; - 每次程序只校正一次(程序級 guard)。
注意:純 headless(無 GUI)的應用不經過
showEvent掛載點,不會觸發 自動校正,此時請使用下面的一次性工具。
一次性校正工具
當 GUI 無法正常啟動,或需要手動執行校正時,可在應用根目錄執行:
python fix_schedule_task_refs.py
# 或指定配置导入目标
python fix_schedule_task_refs.py --config src.config:config
該工具與啟動時自動校正複用同一實現
(sync_schedule_task_indexes()),列印被修正的任務數。
常見問題
- 統一為穩定標識:無論歷史格式是數字索引(
-t 1)還是任務名 (-t 日常任务),校正都會統一遷移為模块路径.类名形式,之後任務排序 變化不再影響計劃任務;執行時按類名回退匹配,模組移動也能自動修正。 - 其它應用任務:
ok-*其它應用註冊的任務不會被本應用改寫。