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

c#:以其他用户身份创建windows计划任务,c#,scheduled-tasks,taskservice,C#,Scheduled Tasks,Taskservice,我正在使用内置TaskService和TaskDefinition库从c#动态创建Windows计划任务 但对于其中的一些,我们需要创建一个新的服务,然后作为不同的用户运行(本地服务或网络服务)。由于任务是动态创建和删除的,我们无法手动编辑所有任务以更改用户。我们需要通过代码来实现。 有可能吗 我尝试了以下设置: TaskDefinition.Principal.Id = "NETWORK SERVICE"; TaskDefinition.Principal.LogonType = TaskLo

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

但对于其中的一些,我们需要创建一个新的服务,然后作为不同的用户运行(本地服务或网络服务)。由于任务是动态创建和删除的,我们无法手动编辑所有任务以更改用户。我们需要通过代码来实现。 有可能吗

我尝试了以下设置:

TaskDefinition.Principal.Id = "NETWORK SERVICE";
TaskDefinition.Principal.LogonType = TaskLogonType.ServiceAccount;
但这给了我创建任务时的一个描述错误:

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


如果没有这两行代码,它可以正常工作,但会以登录用户的身份创建它们。

我对任务调度器的内容做了一些修改,并复制了您的问题。我相信我已经发现了一些事情,也许他们能帮上忙

1。首先,如果您使用服务帐户在调试器中创建任务,您需要确保以管理员身份启动Visual Studio或其他IDE,以确保您具有执行此任务的正确权限

2.我不确定您以后是否在代码中执行此操作,但为了使任务保存并作为网络服务运行,我必须在原则和RegisterTaskDefinition方法中将
网络服务
标识为
NT AUTHORITY\\NETWORKSERVICE

taskservicetservice=newtaskservice();
TaskDefinition=tService.NewTask();
tDefinition.Principal.Id=“NT授权\\NETWORKSERVICE”;
tDefinition.Principal.LogonType=TaskLogonType.ServiceAccount;
tDefinition.RegistrationInfo.Description=“测试”;
tDefinition.Triggers.Add(newdailytrigger{DaysInterval=2});
tDefinition.Actions.Add(newexecaction(“notepad.exe”);
tService.RootFolder.RegisterTaskDefinition(@“Test”、tDefinition、TaskCreation.CreateOrUpdate、,
“NT授权\\网络服务”,空,
TaskLogonType.ServiceAccount);
我使用上面的代码创建了一个测试任务,该任务已成功添加到我的计划程序中,作为
网络服务
,如下所示:


我猜上面的一点或两点可能已经阻止添加任务,希望有帮助

您是否尝试将主体的UserId属性设置为
NT AUTHORITY\NETWORK SERVICE
?谢谢您的建议。我现在已经尝试过了,但它给出了一个错误:“System.Runtime.InteropServices.COMException:”(18,8):UserId:“如果没有域,它会给出一个“E_ACCESSDENIED”错误。只是确定一下:您是否逃过了反斜杠,例如
TaskDefinition.Principal.UserId=“NT AUTHORITY\\NETWORK SERVICE”?是的,我有。如果没有转义字符,它也会产生编译错误。