c#:以其他用户身份创建Windows计划任务

时间:2019-02-18 11:42:12

标签: c# scheduled-tasks taskservice

我正在使用内置的TaskService和TaskDefinition库从c#动态创建Windows计划任务。

但是对于其中一些,我们需要创建然后以其他用户身份运行(本地服务或网络服务)。由于任务是动态创建和删除的,因此我们无法手动编辑所有任务以更改用户。我们需要通过代码来完成。 有可能吗?

我尝试了以下设置:

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

但这在创建任务时给了我非常描述性的错误:

  

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

没有这两行,它可以工作,但以登录用户身份创建它们。

1 个答案:

答案 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); 添加到我的调度程序中,如下所示: enter image description here

我猜测以上几点之一或两者可能阻止了任务的添加,希望对您有所帮助