繁体   English   中英

任务计划程序未运行带有网络路径的任务

[英]Task Scheduler Not Running task with Network Path

我正在测试开发环境中工作,并且正在使用远程网络位置访问可执行文件的任务计划程序中创建任务。 虽然在我的情况下,该网络地址是我自己的计算机。 像这样

\\\\ MyComputerName \\ FolderOnMyPC \\ application.exe

现在,我已经授予了对该文件夹的适当共享访问权限,并且可以通过资源管理器访问该可执行文件,但是当我在Task Scheduler中创建任务时,我将无法运行它。 尽管任务可以像这样在本地磁盘路径上正常运行

d:\\ FolderOnMyPC \\ application.exe

我尝试通过Internet进行调查,但是找不到任何解决方法或发生这种情况的原因,因为即使在

SYSTEM32 /任务

任务计划程序的参数部分中还指定了一些参数

编辑

我正在共享执行任务的代码。

public Task<int> Launch(string Path, string iniFilePath)
        {
            try
            {
                TaskService taskService = new TaskService();

                const string TaskName = "LaunchTask";
                if (taskService.FindTask(TaskName) != null)
                {
                    var task = taskService.FindTask(TaskName);
                }

                iniFilePath = "\"" + iniFilePath + "\"";
                string completeArgument = "/portable /skipupdate " + iniFilePath;
                TaskDefinition taskDefinition = taskService.NewTask();            
                taskDefinition.Principal.LogonType = TaskLogonType.S4U;
                taskDefinition.Actions.Add(new ExecAction(mt4Path, completeArgument, null));                          
                taskDefinition.Settings.Hidden = false;
                Microsoft.Win32.TaskScheduler.Task mtTask = taskService.RootFolder.RegisterTaskDefinition(TaskName, taskDefinition);
                RunningTask runningMT4 = mtTask.Run();
                int processIdMT = (int)runningMT.EnginePID;
                mt4Task.Folder.DeleteTask(mtTask.Name);
                return System.Threading.Tasks.Task.FromResult(processIdMT);
            }
            catch
            {
                throw;
            }
        }

有关该项目的一些额外信息是,我正在研究Service Fabric项目,并将其用作服务。

尽管我可能已经找到了一个非常可行的解决方案,但我希望尝试朝另一个方向发展,但希望它能对像我这样的其他人有所帮助。 问题出在这一行

taskDefinition.Principal.LogonType = TaskLogonType.S4U;

现在看到有关msdn的文档,我发现了我的问题

TASK_LOGON_S4U

使用现有的交互式令牌来运行任务。 用户必须使用用户服务(S4U)登录进行登录。 使用S4U登录时,系统不会存储任何密码,并且无法访问网络或加密文件。

因此,我将任务登录类型更改为“服务帐户”,并提供了NETWORKSERVICE作为用户ID,它解决了我的问题。 这是附加的更新代码

   public Task<int> Launch(string Path, string iniFilePath)
            {
                try
                {
                    TaskService taskService = new TaskService();

                    const string TaskName = "LaunchTask";
                    if (taskService.FindTask(TaskName) != null)
                    {
                        var task = taskService.FindTask(TaskName);
                    }

                iniFilePath = "\"" + iniFilePath + "\"";
                string completeArgument = "/portable /skipupdate " + iniFilePath;
                TaskDefinition taskDefinition = taskService.NewTask();            
                taskDefinition.Principal.LogonType = TaskLogonType.ServiceAccount;
                taskDefinition.Principal.UserId = @"NT AUTHORITY\NETWORKSERVICE";
                taskDefinition.Actions.Add(new ExecAction(mt4Path, completeArgument, null));                          
                taskDefinition.Settings.Hidden = false;
                Microsoft.Win32.TaskScheduler.Task mtTask = taskService.RootFolder.RegisterTaskDefinition(TaskName, taskDefinition);
                RunningTask runningMT4 = mtTask.Run();
                int processIdMT = (int)runningMT.EnginePID;
                mt4Task.Folder.DeleteTask(mtTask.Name);
                return System.Threading.Tasks.Task.FromResult(processIdMT);
            }
            catch
            {
                throw;
            }
        }

这样做的原因是因为我在Service Fabric项目下运行此服务,而Service Fabric使用网络服务来启动其任务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM