如何為服務控制器查詢的計劃任務設置足夠的權限?
我是一名程序員,但遇到的問題已經超越了程式碼,進入了系統管理員的領域,至少我現在是這麼認為的。我將只使用一點程式碼來顯示問題的確切位置,如果有人希望重新創建問題,我還將提供命令行替代程式碼本質上所做的事情。我不是系統管理員,但是因為有人告訴我,如果沒有一些解決方法就無法完成,所以我自己去尋找解決方案,這樣我就可以繼續其他任務,而不必重寫程式碼或搜尋一個程序化的解決方案。我想到了 C 語言使用者和權限模擬,但如果可能的話,我想避免這種情況。
有問題的程序是一個自定義的 C sharp 應用程序 customApp.exe,在 Server 2003 上作為計劃任務執行。問題是我有一個 C sharp 應用程序,它在執行時早期檢查其依賴關係。這些依賴項之一作為服務執行。我執行查詢以驗證服務是否正在執行。檢查服務執行狀態的行為會導致錯誤。故障作為故障審計記錄在安全性下的伺服器事件日誌中,並附有關於權限作為故障原因的註釋。
存在用於執行 customApp.exe 程序的專用服務帳戶。權限非常有限,但對於在測試執行期間看到的應用程序來說已經足夠了。當應用程序作為計劃任務執行時會遇到問題。
我無法查看失敗的計劃任務的設置,但我已在調試器中進行了一些檢查以驗證設置是否正確。基本上我輸入了一個 whoami 報告程式碼行來驗證使用者名和域是否正確。我還知道使用者名、域和密碼必須正確,因為應用程序與 Microsoft SQL 數據庫互動,它在連接字元串中正確選擇和插入以及使用集成安全性。我不知道權限設置,但我知道系統管理員將專用服務帳戶添加到特定計劃任務下的安全選項卡中。
這是引起大驚小怪的 C# 程式碼片段:
ServiceController sc = new ServiceController("Service Name Here"); if (sc.Status != ServiceControllerStatus.Running) {
這是一個與程式碼基本相同的命令提示符替代方案:
sc query "Service Name Here"
執行 customApp.exe 以專用服務帳戶登錄伺服器會成功。執行上述命令提示符 “sc query “Service Name Here” 在登錄時也會成功。執行 customApp.exe 作為計劃任務在指定時間啟動而無需干預,而我在專用伺服器下遠端登錄服務帳戶導致成功。
在任何其他條件下將 customApp.exe 作為計劃任務執行都會導致失敗。這可能是最讓我困惑的部分。如前所述,當我使用專用使用者帳戶遠端登錄時,它作為計劃任務成功,否則失敗。
值得注意的是,我並沒有嘗試啟動或停止 Windows 服務。我發現這需要管理員權限,而我對利用這種權力不感興趣。我堅信以完成工作所需的最簡單的權限執行應用程序。
您需要將任務計劃程序配置為以特定使用者身份執行。從任務計劃程序中點擊操作下拉菜單,然後選擇“AT 服務帳戶配置”。將此從系統帳戶更改為“另一個使用者帳戶”,然後將其更改為您希望在其下執行命令的帳戶。
您可能希望指定一個不必更改密碼的帳戶,這樣您就不必每次都重新配置任務調度程序。