在C#中启动一个预定任务

15

我正在尝试使用C#编写一个简单的表单,以在一些计算机上运行定时任务。目前为止,我的代码是:

private void button_Click(object sender, EventArgs e)
    {
        try
        {

            for (int i = 0; i < num_of_computers; i++)
            {
                string line;
                line = (" /run /tn myTask /s " + _ReplacerObj.MyComputers[i] + " /u user s /p password");
                proc.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
                proc.FileName = @"C:\WINDOWS\SYSTEM32\schtasks.exe";
                proc.Arguments = line;
                Process.Start(proc);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString(), "Error Message!");
        }

由于某些原因,这个方法不起作用(即,在IE中,计划任务没有启动)。我尝试通过以下方式在cmd中运行:

c:\windows\system32\schtasks.exe /run /tn myTask /s myIp /u user /p password

并且它正常工作。有什么建议吗?谢谢!


“出于某种原因” - 是什么原因?可能是任何原因。你有错误信息吗?当您在调试器中运行此代码时,Process.Start是否会返回一个值 - 即进程? - ChrisF
你确认了用于开始的字符串与在命令提示符中测试的字符串完全相同吗? - George Duckett
3个回答

10

我建议使用一个.NET封装来完成任务调度。

过去我曾经使用这个封装库,效果很好。


10

using Microsoft.Win32.TaskScheduler;

using (TaskService tasksrvc = new TaskService(@"\\" + servername, username, domain, password, true))
{       
    Task task = tasksrvc.FindTask(taskSchedulerName);
    task.Run();
}   

2
我使用以下代码,它可以很好地工作。如果你将自己的参数插入其中,可能会有所帮助。
var p = new Process
                            {
                                StartInfo =
                                    {
                                        UseShellExecute = false,
                                        FileName = "SCHTASKS.exe",
                                        RedirectStandardError = true,
                                        RedirectStandardOutput = true,
                                        CreateNoWindow = true,
                                        WindowStyle = ProcessWindowStyle.Hidden,
                                        Arguments = arguments
                                    }
                            };
            p.Start();

当我尝试在Win10机器上运行计划任务时,出现了“权限被拒绝”的错误... 有任何想法是为什么吗? - SiL3NC3
@SiL3NC3 我假设你正在 Visual Studio 或 Rider 内运行。你需要升级权限才能这样做。关闭 IDE 然后以管理员身份运行,你就有权限创建该任务了。 - dove
我明白了问题,抱歉一直在唠叨。 ;) 我正在从 ASPX 页面运行 Process.Start,但由于安全原因,IIS 运行时不允许在本地计算机上启动进程。解决方法是使用自定义的 Windows 服务来完成此操作。(只是为了给后续读者提供完整信息) - SiL3NC3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接