c# - UnauthorizedException 尝试使用 Windows TaskScheduler 包装器

标签 c# winapi taskscheduler

我有以下代码,它使用 David Hall 的 TaskScheduler Nuget 包的 2.5.20 版,它包装了 Windows 任务计划程序。我正在尝试从特定文件夹中获取所有任务,但对于这个问题,我们只看这段代码:

using (TaskService ts = new TaskService(_ServerName, _TaskSchedulerUsername, _DomainName, _TaskSchedulerPassword)) {
    var folder = ts.GetFolder(TASK_FOLDER_NAME);
}

_TaskSchedulerUsername_TaskSchedulerPassword 是具有管理员权限的有效本地帐户;我使用这些凭据打开 Windows 任务计划程序并手动创建一个任务,作为测试,并且能够毫无问题地执行此操作。

_ServerName_DomainName 是一样的,本地机器。

此代码过去按原样工作,目前在我的测试服务器(运行 Windows Server 2003)上运行没有问题;它还在生产 Windows 2012 Server 机器上运行。在我的开发箱(运行 Windows 10)上,当我尝试实例化新的 TaskService 实例时收到 UnauthorizedAccessException:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

堆栈跟踪不是很有用:

at Microsoft.Win32.TaskScheduler.V2Interop.TaskSchedulerClass.Connect(Object serverName, Object user, Object domain, Object password)
at Microsoft.Win32.TaskScheduler.TaskService.Connect()
at Microsoft.Win32.TaskScheduler.TaskService.EndInit()
at Microsoft.Win32.TaskScheduler.TaskService..ctor(String targetServer, String userName, String accountDomain, String password, Boolean forceV1)
at Test.TaskSchedulerServices.GetTaskSchedules() in C:\Projects\LE\dev\Test\Shared\Services\TaskSchedulerServices.svc.cs:line 54

关于为什么这不能在我的开发箱上运行以及如何处理它有什么想法吗?

最佳答案

Windows Vista 中的 Task Scheduler API 发生了重大变化。您的 Server 2003 计算机位于 v1 , 而新的 Windows 10 机器在 v2 上.在 v2 的情况下,有问题的 NuGet 包最终调用 ITaskScheduler::Connect .该文档指定您只需将服务器名称保留为空即可连接到本地计算机。 (这应该也适用于 v1 的 SetTargetComputer。)如果您要指定本地用户名,域应该设置为计算机名。

虽然如果你只是想以当前用户的身份连接到本地机器,你可以只使用不带参数的 TaskService 构造函数。

关于c# - UnauthorizedException 尝试使用 Windows TaskScheduler 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37708850/

相关文章:

c# - 我怎样才能获得对属性 setter 的引用?

c++ - 使用Windows API创建快捷方式.lnk

c - 在没有 UAC 提示的情况下提高进程完整性

apache-spark - 警告 cluster.YarnScheduler : Initial job has not accepted any resources

python - 由于numpy,Python脚本无法与Windows任务计划程序一起运行

c# - 何时检查 List<T> 是否为 null,何时检查 0 以及两者

c# - 在 C# 中使用 .Show() 方法后,由于循环而导致对话框无法正确显示

c# - SqlBulkCopy - 数据源中 String 类型的给定值无法转换为指定目标列的 money 类型

c++ - CryptEncrypt AES 256 在加密最后一个 block 时失败

远程计算机中的 C# 任务计划程序