В .NET создать службу очень просто. Создать проект WindowsService. В результате сгенерируется проект, содержащий 2 класса: Service и ServiceInstaller. Первый класс реализует функционал службы, второй отвечает за её регистрацию в системе и удаление.
Пример класса ServiceInstaller (из одного моего проекта)
using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;
namespace MyNamespace
{
/// <summary>
/// Summary description for NotificationServiceInstaller.
/// </summary>
[RunInstaller(true)]
public class MyServiceInstaller : System.Configuration.Install.Installer
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public ServiceInstaller si;
public ServiceProcessInstaller spi;
public MyServiceInstaller()
{
// This call is required by the Designer.
InitializeComponent();
// TODO: Add any initialization after the InitComponent call
si = new ServiceInstaller();
spi = new ServiceProcessInstaller();
spi.Account = ServiceAccount.LocalSystem;
spi.Username = null;
spi.Password = null;
si.DisplayName = "Это имя увидишь в списке служб";
si.ServiceName = "MyService";
si.StartType = ServiceStartMode.Manual;
Installers.Add(si);
Installers.Add(spi);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
} // class NotificationServiceInstaller
} // namespace Amcor.ErrandsControl.NS
В конструкторе описываются: учётная запись для запуска службы, названия и режим запуска (ручной, автоматический, отключено). Этого достаточно.
Класс самого сервиса тоже прост. Наследуется от System.ServiceProcess.ServiceBase. Там пиши всё что хочешь (то, чего должна делать служба). У базового класса есть ряд методов, которые нужно переопределить.
protected override void OnStart(string[] args)
protected override void OnPause()
protected override void OnContinue()
protected override void OnStop()
Которые вызываются при запуске, остановке, возобновлении и выключении службы.
Вообще, wizard сам создаст все нужные методы.
Для решения твоей задачи нужно в классе поставить таймер и написать обработчик таймера, где бы вызывалась твой exe.
Конфигурация для .NET служб стандартна для .NET - хранится в XML-файле с расширением config, лежащем там же, где и полученная dll службы. В нём ты можешь хранить путь к своему exe, а можешь вообще ничего не хранить.
Для регистрации/удаления сервиса в системе в .NET Framework можно воспользоваться утилитой InstallUtil.exe.