程序無法作為計劃任務正常執行
情況
我有一個批處理腳本,它準備一些文件,執行一個程序(
.exe
),然後刪除所述文件。此任務應每小時執行一次,因此我嘗試使用計劃任務對其進行配置。問題是前面提到的程序在從任務呼叫時(既不是通過
.bat
腳本,也不是.exe
直接呼叫)無法正常執行,但我在日誌中沒有收到任何警告或錯誤消息。設置
該任務配置為作為具有正確設置的所有權限的 Windows 服務帳戶執行。使用此帳戶通過 RDP 登錄時,我可以直接執行
.bat
and.exe
沒有問題,但該任務似乎仍然沒有執行任何操作。這很容易觀察到,因為程序總是修改文件,並且修改的時間戳不會通過任務改變。在計劃的任務日誌中,我得到了啟動程序、退出等任務的資訊消息。然而,“結果程式碼”是
111
(嘗試Google這個沒有運氣,我得到的唯一關聯是“文件名太長",這與 AFAIK 完全無關)。在應用程序日誌中,我一無所獲。我懷疑是問題
該程序是一個古老的怪物,它會產生某種啟動螢幕(它實際上是一個普通視窗),即使不需要 GUI,因為它不需要互動並且在操作後會自行關閉。視窗出現約 2 秒鐘。
我懷疑對 GUI 的這種要求與任務失敗有關,但我不確定。當我使用執行任務的使用者(通過 RDP)登錄時,啟動計劃任務時不會出現任何視窗。
關於 GUI 的編輯
我建構了一個非常小的 C# 執行檔,它可以在沒有主視窗的情況下啟動程序(使用
ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden
)。即使這樣,計劃任務仍然沒有成功正確啟動程序,但返回碼是 now0
。更新
當我將任務配置為“無論使用者是否登錄都執行”,並且該
run with highest privileges
選項未選中時,錯誤值為2147943859
.我可以做些什麼來排除故障?
作業系統 = Windows Server 2008 R2 SP1
如果需要更多資訊,請在評論中告訴我。
我相信您的問題與用於執行任務的帳戶的權限或嘗試執行任務時存在的帳戶上下文有關。
測試控制台會話要求
您的**.EXE**可能必須在
Console
電腦上的會話(即會話 0)中執行。要對此進行測試:
- 將任務配置為**僅在使用者登錄時執行,**並指定未來 2 分鐘的任務開始時間
- 使用與執行任務相同的使用者帳戶登錄到電腦(最好登錄到控制台會話,通過物理上位於控制台或使用提供對控制台的訪問權限的遠端訪問程序。要確認您正在使用控制台會話,從命令提示符執行
QWINSTA
,觀察SESSIONNAME
列,並確認>
指示器在旁邊console
,換句話說,它應該顯示為>console
)- 等待任務執行
如果任務執行正常,請嘗試
SCHTASKS.EXE
使用/IT
參數調度任務。如果做不到這一點,您可能別無選擇,只能將電腦配置為以您的服務使用者帳戶自動登錄並將任務作為啟動程序執行。檢查權限
此外,正如我已經建議的那樣,請檢查以下內容以確認用於執行任務的帳戶已獲得正確許可:
- 授予帳戶作為批處理作業登錄使用者權限(在本地組策略中找到
Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments
)- 確認任務配置為以最高權限執行
- 確認使用者對其必須與之互動的所有文件夾和文件擁有完整的 NTFS 權限。不做任何假設;而是通過導航到此類文件位置並使用
Effective Permissions
文件/文件夾屬性中的選項卡來確認Security > Advanced
要檢查/嘗試的其他事項
- 該任務是否需要訪問網路資源?當您使用使用者帳戶登錄時,可能會出現映射驅動器之類的東西,但根據伺服器的配置,當從任務計劃程序執行時,使用者帳戶的上下文中可能不會出現。
- 將一些日誌記錄添加到您的批處理文件中。在它執行的每一行之後,讓它把一些輸出寫入一個日誌文件,這樣你就知道它卡在哪裡了。例如:
@echo off echo Line 1 >> "C:\MyLog.txt" "C:\My Folder\myOldProgram.exe" echo Line 2 >> "C:\MyLog.txt" DEL somefile.dat echo Line 3 >> "C:\MyLog.txt"
- 嘗試使用**.EXE**執行
START
,例如START "myTitle" "C:\full\path\to\my.EXE"
我正在回復一個舊文章,以防它幫助其他人。我遇到過同樣的問題。事件日誌說程序正常完成,但甚至第一行程式碼都不會為我寫入日誌。它最終成為任務計劃程序中的“開始”選項。當我在目前目錄中時,我突然想到該程序從命令行執行良好。在同一目錄中有清單文件和其他依賴項。因此,如果您告訴計劃作業在與 EXE 相同的目錄中啟動,您可能會得到有利的結果。這對我來說是解決方案。