Beneck90 Ответов: 1

Создайте задачу с помощью C #, но ничего не делайте, есть какие-нибудь предложения?


Создайте задачу, чтобы открыть приложение в определенный день и время, я искал много страниц для получения информации о создании задачи, я не вижу ошибки, и она не запускается. Мой код ничего не делает ...
Я не включил библиотеку TaskScheduler в проект установки, но я уже исправил ее, все еще мой код ничего не делает.

Что я уже пробовал:

string Dia = comboBox2.SelectedItem.ToString();
        short hra = Convert.ToInt16(textBox4.Text);
        short min = Convert.ToInt16(textBox3.Text);

        using (ScheduledTasks Tareas = new ScheduledTasks())
        {
            Task tarea = Tareas.CreateTask("Ejecutar secador de botas");

            tarea.ApplicationName = @"C:\Program Files (x86)\Fishken SB\SecadorDeBotas           \SecadorBotas.exe";

            tarea.Comment = "Tarea que ejecuta programa secador de botas";            

            tarea.Creator = "USER";

            tarea.Priority = System.Diagnostics.ProcessPriorityClass.Normal;

            switch (Dia)
            {
                case "Lunes":

                    tarea.Triggers.Add(new WeeklyTrigger(hra, min, DaysOfTheWeek.Monday));

                    tarea.Save();

                    MessageBox.Show("Configuración guardada!!");

                    break;
                case "Martes":

                    tarea.Triggers.Add(new WeeklyTrigger(hra, min, DaysOfTheWeek.Tuesday));

                    tarea.Save();

                    MessageBox.Show("Configuración guardada!!");

                    break;
                case "Miercoles":

                    tarea.Triggers.Add(new WeeklyTrigger(hra, min, DaysOfTheWeek.Wednesday));

                    tarea.Save();

                    MessageBox.Show("Configuración guardada!!");

                    break;

                case "Jueves":

                    tarea.Triggers.Add(new WeeklyTrigger(hra, min, DaysOfTheWeek.Thursday));

                    tarea.Save();

                    MessageBox.Show("Configuración guardada!!");

                    break;
                case "Viernes":

                    tarea.Triggers.Add(new WeeklyTrigger(hra, min, DaysOfTheWeek.Friday));

                    tarea.Save();

                    MessageBox.Show("Configuración guardada!!");

                    break;
                case "Sabado":

                    tarea.Triggers.Add(new WeeklyTrigger(hra, min, DaysOfTheWeek.Saturday));

                    tarea.Save();

                    MessageBox.Show("Configuración guardada!!");

                    break;
                case "Domingo":

                    tarea.Triggers.Add(new WeeklyTrigger(hra, min, DaysOfTheWeek.Sunday));

                    tarea.Save();

                    MessageBox.Show("Configuración guardada!!");

                    break;
            }

        }

1 Ответов

Рейтинг:
2

RickZeeland

Попробуйте эту реализацию и посмотрите, работает ли она: планировщик[^]
Обратите внимание, что при запуске этого приложения в качестве службы Windows вы не можете запускать с его помощью приложения Windows.
Другим, возможно, более простым вариантом было бы вызвать TaskScheduler с помощью Process, например:

// Create updater task "TEST Task" between 9 and 10 on monday.
var scheduleTime = "9:" + DateTime.Now.Minute.ToString("D2");
this.CreateSchedulerTask("TEST Task", scheduleTime, Application.ExecutablePath);

/// <summary>
/// Create Windows scheduler task to run weekly on monday.
/// Exclude from obfuscation.
/// </summary>
/// <param name="scheduleTime">The time to run the task.</param>
private void CreateSchedulerTask(string myTaskName, string scheduleTime, string myApp)
{
	try
	{
		var command = Path.Combine(Environment.SystemDirectory, @"SchTasks");
		var args = "/Query";
		var result = ProcessRun(command, args, true);

		if (result.Contains(myTaskName))
		{
			Debug.Print(myTaskName + " already running.");
			return;
		}

		command = Path.Combine(Environment.SystemDirectory, @"SchTasks");
		args = "/Create /SC WEEKLY /D MON /TN \"" + myTaskName + "\" /TR \"" + myApp + "\" /ST " + scheduleTime;
		Debug.Print(command + "  " + args);
		result = ProcessRun(command, args, false);

		if (!string.IsNullOrEmpty(result))
		{
			 MessageBox.Show(result);
		}
		else
		{
			 MessageBox.Show(@"Scheduler task created: monday every week at " + scheduleTime);
		}
	}
	catch (Exception ex)
	{
		MessageBox.Show("CreateSchedulerTask()" + ex.Message);
	}
}

/// <summary>
/// Runs an elevated command using ShellExecute 'runas' if redirectStandardOutput is false.
/// Waits until completed.
/// </summary>
/// <param name="fileName">The file name or command to run.</param>
/// <param name="args">The arguments to pass.</param>
/// <param name="redirectStandardOutput">Redirect Standard Output.</param>
/// <param name="waitForExit">Optional: default wait max 2 minutes.</param>
/// <param name="hideWindow">Optional: default do not hide window.</param>
/// <returns>Empty string on success.</returns>
public string ProcessRun(string fileName, string args, bool redirectStandardOutput, bool waitForExit = true, bool hideWindow = false)
{
	string result = string.Empty;
	const int ErrorCancelled = 1223;

	try
	{
		using (Process process = new Process())
		{
			process.StartInfo = new ProcessStartInfo();
			process.StartInfo.FileName = fileName;

			if (hideWindow)
			{
				process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
			}

			if (!string.IsNullOrEmpty(args))
			{
				process.StartInfo.Arguments = args;
			}

			process.StartInfo.CreateNoWindow = true;

			if (redirectStandardOutput)
			{
				process.StartInfo.RedirectStandardOutput = true;
				process.StartInfo.UseShellExecute = false;
				process.Start();

				using (StreamReader reader = process.StandardOutput)
				{
					string resultOut = reader.ReadToEnd();
					Debug.Print(resultOut);
				}
			}
			else
			{
				process.StartInfo.Verb = "runas";
				process.StartInfo.UseShellExecute = true;
				process.Start();
			}

			if (waitForExit)
			{
				// Timeout 2 minutes
				process.WaitForExit(120000);
			}
		}
	}
	catch (Win32Exception ex)
	{
		if (ex.NativeErrorCode == ErrorCancelled)
		{
			result = "ProcessRun() cancelled";
		}
		else
		{
			result = @"ProcessRun() error: " + ex.Message;
		}
	}
	catch (Exception ex)
	{
		result = @"ProcessRun() error: " + ex.Message;
	}

	return result;
}


Beneck90

Первое решение, которое вы мне дали, не расписывает задачу, я запускаю приложение, но ничего не делаю, а второе не работает, спасибо!

RickZeeland

Тогда, может быть, что-то не так с вашим Windows TaskScheduler или другие приложения мешают ему, когда вы вводите задачу вручную, это работает ?

Beneck90

Если он работает вручную ...

RickZeeland

Goto Windows Find - введите "планировщик задач" и создайте задачу вручную.

Beneck90

Разработка приложения идея состоит в том, чтобы иметь возможность делать это из программы, а не непосредственно из Диспетчера задач ...

RickZeeland

Идея состояла в том, чтобы проверить, работает ли задача, если вы вводите ее вручную ...

Beneck90

да, он работает вручную

Beneck90

Я использую библиотеку TaskScheduler
"пользуясь планировщиком;"
Составитель Заданий.ссылка на dll уже добавлена ...