【发布时间】:2019-07-11 19:01:00
【问题描述】:
我正在使用内置 TaskService 和 TaskDefinition 库从 c# 动态创建 Windows 计划任务。
但是对于其中一些,我们需要创建然后以不同的用户(本地服务或网络服务)运行。由于任务是动态创建和删除的,我们无法手动编辑所有任务来更改用户。我们需要通过代码来实现。 有可能吗?
我尝试了以下设置:
TaskDefinition.Principal.Id = "NETWORK SERVICE";
TaskDefinition.Principal.LogonType = TaskLogonType.ServiceAccount;
但这在创建任务时给了我非常描述性的错误:
System.Runtime.InteropServices.COMException: '(52,4):Task:'
如果没有这两行,它可以工作,但会将它们创建为登录用户。
【问题讨论】:
-
您是否尝试将 Principal 的 UserId 属性设置为
NT AUTHORITY\NETWORK SERVICE? -
感谢您的建议。我现在已经尝试过了,它给出了一个错误:'System.Runtime.InteropServices.COMException: '(18,8):UserId:' 如果没有域,它会给出一个 'E_ACCESSDENIED' 错误。
-
只是为了确定:你是否已经逃脱了反斜杠,例如
TaskDefinition.Principal.UserId = "NT AUTHORITY\\NETWORK SERVICE";? -
是的,我有。如果没有转义字符,它也会产生编译错误。
标签: c# scheduled-tasks taskservice