簡體   English   中英

c#:以不同的用戶身份創建 windows 計划任務

[英]c# : Create windows scheduled task as a different user

我正在使用內置的 TaskService 和 TaskDefinition 庫從 c# 動態創建 Windows 計划任務。

但是對於其中一些,我們需要創建然后以不同的用戶(本地服務或網絡服務)運行。 由於任務是動態創建和刪除的,我們無法手動編輯所有任務來更改用戶。 我們需要通過代碼來完成。 有可能嗎?

我嘗試了以下設置:

TaskDefinition.Principal.Id = "NETWORK SERVICE";
TaskDefinition.Principal.LogonType = TaskLogonType.ServiceAccount;

但這在創建任務時給了我一個非常描述性的錯誤:

System.Runtime.InteropServices.COMException: '(52,4):Task:'

如果沒有這兩行,它可以工作,但會以登錄用戶的身份創建它們。

我玩過任務計划程序的東西並復制了您的問題。 我相信我已經找到了一些東西,也許它們可以提供幫助。

1.首先,如果您使用服務帳戶在調試器中創建任務,您需要確保您的 Visual Studio 或其他 IDE 以管理員身份啟動,以確保您擁有執行此任務的正確權限。

2.我不知道,如果你這樣做后面的代碼反而使保存任務並運行了網絡服務,我必須確定Network ServiceNT AUTHORITY\\\\NETWORKSERVICE中並重的原則,並在RegisterTaskDefinition方法:

TaskService tService = new TaskService();
TaskDefinition tDefinition = tService.NewTask();
tDefinition.Principal.Id = "NT AUTHORITY\\NETWORKSERVICE";
tDefinition.Principal.LogonType = TaskLogonType.ServiceAccount;
tDefinition.RegistrationInfo.Description = "Testing";

tDefinition.Triggers.Add(new DailyTrigger {DaysInterval = 2});
tDefinition.Actions.Add(new ExecAction("notepad.exe"));
tService.RootFolder.RegisterTaskDefinition(@"Test", tDefinition, TaskCreation.CreateOrUpdate, 
                                            "NT AUTHORITY\\NETWORKSERVICE", null, 
                                            TaskLogonType.ServiceAccount);

我使用上面的代碼制作了一個測試任務,該任務作為Network Service成功添加到我的調度程序中,如下所示: 在此處輸入圖片說明

我猜以上兩點可能已經阻止了任務的添加,希望有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM