Написал уже два разных "планировщика" внутри проекта используя немного c# и логики в таблице из которых берутся данные, когда прога должна работать. Пишется довольно легко и просто.
1. Проверяется дата примерно с помощью такого кода(взято откуда-то отсюда с форума)
var rowDate = project.Variables["post_time"].Value;
//rowDate = "26.10.2015 2:51:00"; // Для проверки
System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("ru-RU");
DateTime date = DateTime.Parse(rowDate, culture);
var date2 = DateTime.Now; // Текущее время
TimeSpan span = date - date2;
double mins = span.TotalMinutes; // Разница во времени
return Math.Round(mins, 0);
Потом идет проверка. Разница с текущим временем в минутах (> 5 например) если "да" то в путь, если нет - берем следующую строку и цикл.
2. Тоже самое можно разбить на дни недели и сверять часы работы(минуты, если хотите)
int day = ((int)DateTime.Now.DayOfWeek == 0) ? 7 : (int)DateTime.Now.DayOfWeek;
String week_day = project.Variables["post_time_day_" + day.ToString()].Value;
return week_day;
Из кода понятно что у нас в таблице есть 7 столбцов дней и внутри время работы через запятые, которое пишется в список. И дальше логика почти та же что и в первом случае.
Если вам нужно случайное количество запусков(выполнений проекта после проверки времени) в час, сделайте что-то типо рандомных проверок времени. Разбейте все на интервалы и считайте количество выполненных раз. И выполняйте проект N раз в 15 минут, но не больше M раз.
Я понимаю, что в данном подходе есть недостатки, но он целиком компенсирует мои потребности.
ps: в рамках программы при доступе к c# можно реализовать практически любую логику.