2

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

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

我尝试了以下设置:

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

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

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

如果没有这两行,它可以工作,但会将它们创建为登录用户。

4

1 回答 1

2

我已经玩过任务计划程序的东西并复制了你的问题。我相信我已经找到了一些东西,也许他们可以提供帮助。

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

2.我不确定您是否稍后在代码中执行此操作,但为了使任务保存并作为 NETWORK SERVICE 运行,我必须在原则和 RegisterTaskDefinition 方法中Network Service进行标识: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);

我使用上面的代码制作了一个成功添加到我的调度程序的测试任务,Network Service如下所示: 在此处输入图像描述

我猜上述一点或两点可能已阻止添加任务,希望对您有所帮助

于 2019-02-18T15:05:47.773 回答