我在修改機器上已存在的任務時遇到問題。我試圖用C#生成的interop接口(system32/taskschd.dll生成的Interop.TaskScheduler.dll)來完成此操作。在Windows任務調度程序中更改已調度任務的運行時間
要開始,我不能使用其他庫如http://taskscheduler.codeplex.com/。 已經過測試,可以與之前提到的庫一起使用。現在當我嘗試做與生成的接口相同的東西時,沒有什麼改變基本上我在做什麼:
string STR_DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
string taskName = "taskName",
user = "user",
pass = "pass";
DateTime nextRun = new DateTime.Now.AddDays(7);
TaskSchedulerClass ts = new TaskSchedulerClass();
ts.Connect(null, null, null, null);
IRegisteredTask task = ts.GetFolder("\\").GetTask(String.Format("\\{0}",taskName));
foreach (ITrigger t in task.Definition.Triggers)
t.StartBoundary = nextRun.ToString(STR_DateTimeFormat.Replace(" ", "T"));
ts.GetFolder("\\").RegisterTaskDefinition(task.Path,
task.Definition,
(int)_TASK_CREATION.TASK_UPDATE,
user,
pass,
_TASK_LOGON_TYPE.TASK_LOGON_PASSWORD,
null);
因爲這應該是工作先來看看,但由於某些原因,當我試圖在線路分配新的datetime的運行:
t.StartBoundary = nextRun.ToString(STR_DateTimeFormat.Replace(" ", "T"));
它不工作。實際上,在那個foreach中它已經改變了,但是當我試圖調試並創建另一個打印StartBoundary值的foreach時,它顯示了舊值。我做錯了什麼嗎?有沒有機會讓它工作? :-) 謝謝。
已解決。對於任何有類似問題的人,您必須在修改任務之前創建任務副本。獲得IRegisteredTask後添加這些行。 'ITaskDefinition task = ts.NewTask(0); task = oldTask.Definition;' – mariozski 2011-12-29 15:42:16
我需要實現相同的任務(更新已調度任務的運行時間),並且實現了此解決方案。第一次執行時更新時間。但在第二次,RegisterTaskDefinition拋出AccessDeniedException。有人可以幫忙嗎? – Dash 2017-03-16 06:03:02
很難說...當用戶在哪個應用程序更改任務運行時沒有足夠的權限來更改任務定義(即不是本地管理員),通常會引發此問題。我不明白爲什麼你不能兩次改變同一個任務。 – mariozski 2017-03-22 22:57:37