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