マシンに既に存在するタスクの変更に問題があります。私はC#(interop.TaskScheduler.dll system32/taskschd.dllから生成)から生成されたinteropのインターフェイスでこれをしようとしています。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);
を最初の一見のために、それが動作するはずが、私はラインでの実行のために新しい日時を割り当てよう何らかの理由:
t.StartBoundary = nextRun.ToString(STR_DateTimeFormat.Replace(" ", "T"));
それは動作しません。 。実際にはforeachでは変更されましたが、デバッグしようとしたときにStartBoundaryの値を出力する別のforeachを作成すると、古い値が表示されます。間違っていることをしていますか?それを稼働させる機会はありますか? :-) ありがとうございました。
解決済み。同様の問題を抱えている人は、変更する前にタスクのコピーを作成する必要があります。 IRegisteredTaskの取得後にこれらの行を追加します。 'ITaskDefinitionタスク= ts.NewTask(0); task = oldTask.Definition; ' – mariozski
私は同じタスク(既にスケジュールされたタスクの実行時間を更新する)を達成する必要があり、私はこのソリューションを実装しました。最初に実行されると時刻が更新されます。しかし、2回目にRegisterTaskDefinitionはAccessDeniedExceptionをスローします。誰か助けてもらえますか? – Dash
言うことは難しいです...通常、これは、アプリケーションの変更タスクが実行されているユーザーがタスクの定義を変更するための十分な権限を持っていない場合(つまりローカル管理者ではない場合)にスローされます。同じ仕事を二度変えることができなかった理由は本当にわかりません。 – mariozski