У меня была задача (ха) создать приложение, которое позволит пользователям планировать приложение командной строки, которое у нас есть, с параметром.
Таким образом, приложение командной строки берет xml и «запускает его»
Итак, суть в том, что мне нужно либо создать службу Windows, либо узнать, как взаимодействовать со службой планировщика заданий, уже запущенной на компьютере (версия 1 Xp / 2003)
Сначала я подумалБыло бы легко запустить службу, а когда задание будет отправлено, рассчитайте время между запуском и запуском и настройте таймер для ожидания этого количества времени.Это лучше, чем проверять каждую минуту, пора ли бежать.
Если я ударился о стену, то понял, что не знаю, как связаться с работающей службой Windows.За исключением, может быть, создания файла с деталями и наличия службы с наблюдателем файлов для загрузки файла и изменения расписания.
Поэтому основные вопросы заключаются в том, как я могу выполнить этот код psedo
из клиента
serviceThatIsRunning.Add(Job)
Или невмешательство в расписание задач или создание файлов .job с помощью c # 3.5
Редактировать:
Для пояснения я создал небольшой образецчтобы получить свои мысли о «бумаге»
Итак, у меня есть класс работы
public class Job
{
#region Properties
public string JobName { get; set; }
public string JobXML { get; set; }
private Timer _JobTimer;
public Timer JobTimer
{
get
{
return _JobTimer;
}
}
#endregion
public void SetJobTimer(TimeSpan time)
{
if (_JobTimer != null)
{
_JobTimer.Dispose();
}
_JobTimer = new Timer(new TimerCallback(RunJob), null, time, time);
}
private void RunJob(Object state)
{
System.Diagnostics.Debug.WriteLine(String.Format("The {0} Job would have ran with file {1}", JobName, JobXML));
}
public override string ToString()
{
return JobName;
}
public void StopTimer()
{
_JobTimer.Dispose();
}
}
Теперь мне нужно создать приложение для размещения этих рабочих мест, которые постоянно работают, поэтому я хотяслужб Windows, а затем приложение Windows, позволяющее пользователю работать со списком заданий.
Поэтому вопрос заключается в том, могу ли я создать службу Windows, как мне взаимодействовать с методами в этой службе, чтобы я мог изменитьJobList, добавить, удалить, изменить.
Вот небольшое приложение для Windows, которое я создал, чтобы показать, что класс Job действительно работает.Интересный момент: если я делаю это правильно, я не добавляю задание в список, и метод Add выходит из части «Таймер задания», которая по-прежнему выполняется и не собирается сборщиком мусора.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnAddJob_Click(object sender, EventArgs e)
{
Job job = new Job();
job.JobName = txtJobName.Text;
job.JobXML = txtJobXML.Text;
job.SetJobTimer(new TimeSpan(0, 0, Convert.ToInt32(JobTime.Value)));
// ??Even If I don't add the Job to a list or ListBox it seems
// ??to stay alive and not picked up by the GC
listBox1.Items.Add(job);
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex > -1)
{
Job job = listBox1.Items[listBox1.SelectedIndex] as Job;
txtJobName.Text = job.JobName;
txtJobXML.Text = job.JobXML;
}
}
private void btnRemove_Click(object sender, EventArgs e)
{
Job job = listBox1.Items[listBox1.SelectedIndex] as Job;
job.StopTimer();
listBox1.Items.Remove(job);
}
private void btnCollect_Click(object sender, EventArgs e)
{
GC.Collect();
}
}