我正在使用内置的TaskService和TaskDefinition库从c#动态创建Windows计划任务。
但是对于其中一些,我们需要创建然后以其他用户身份运行(本地服务或网络服务)。由于任务是动态创建和删除的,因此我们无法手动编辑所有任务以更改用户。我们需要通过代码来完成。 有可能吗?
我尝试了以下设置:
TaskDefinition.Principal.Id = "NETWORK SERVICE";
TaskDefinition.Principal.LogonType = TaskLogonType.ServiceAccount;
但这在创建任务时给了我非常描述性的错误:
System.Runtime.InteropServices.COMException:'(52,4):Task:'
没有这两行,它可以工作,但以登录用户身份创建它们。
答案 0 :(得分:1)
我已经对Task Scheduler进行了一些处理,并复制了您的问题。我相信我发现了一些东西,也许它们可以帮上忙。
1。。首先,如果您使用服务帐户在调试器中执行任务,则需要确保以管理员身份启动Visual Studio或其他IDE,以确保您具有执行此操作的正确权限任务。
2。。我不确定是否稍后在代码中执行此操作,但是要使任务保存并以NETWORK SERVICE的身份运行,我必须将Network Service
标识为{{1 }}在原理上和在RegisterTaskDefinition方法上:
NT AUTHORITY\\NETWORKSERVICE
我使用上面的代码制作了一个测试任务,该任务已成功作为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);
添加到我的调度程序中,如下所示:
我猜测以上几点之一或两者可能阻止了任务的添加,希望对您有所帮助