Я пытаюсь создать несколько служб Windows для разных целей. Например, мне нужны службы Windows, которые будут:
- Отправить ежедневный отчет по электронной почте
- Периодически очищать некоторые архивные данные каждые 30 минут
- и т.д.
Задачи, для которых мне нужны службы Windows, отличаются друг от друга, поэтому мне не очень нравится идея, что все они будут в одной службе.
Пока у меня есть проект в Visual Studio 2008. Я создал службу Windows, я установил таймер для события OnStart (он просто пишет в текстовый файл каждые 5 секунд для тестирования цели). Затем я добавил установщик в проект, и когда я запускаю InstallUtil.exe, все работает нормально.
Проблема возникает, когда я добавляю вторую службу Windows в тот же проект. Я снова настроил код OnStart с той же самой информацией о регистрации (немного другой, чтобы я мог сказать, какая служба записывает в журнал). Со второй службой Windows я изменил главное событие в Program.cs с:
static void Main(string[] args)
{
ServiceBase[] ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
до:
static void Main(string[] args)
{
ServiceBase[] ServicesToRun = new ServiceBase[]
{
new Service1(),
new Service2()
};
ServiceBase.Run(ServicesToRun);
}
На этом этапе нет ошибок времени компиляции, но служба Service2 никогда ничего не делает ... задача ведения журнала никогда не запускается.
Я сузил его до того факта, что второй сервис не имеет связанного с ним «Установщика». Затем я попытался добавить установщик, как я сделал с первой службой (т.е. щелкните правой кнопкой мыши конструктор службы и выберите «Добавить установщик»). Теперь, когда я перехожу к файлу ProjectInstaller.cs, там есть другой serviceInstaller (serviceInstaller2).
Теперь, когда я собираю проект и пытаюсь установить службы, и я захожу в окно панели управления «Службы» и пытаюсь запустить Service1, я получаю следующее сообщение об ошибке:
Windows не удалось запустить службу Service1 на локальном компьютере.
Ошибка 1083: исполняемая программа, для которой настроен этот сервис, не реализует сервис.
Я получаю то же сообщение об ошибке, если пытаюсь запустить Service2 (за исключением того, что сообщение об ошибке, конечно, идентифицирует Service2).
Есть ли что-то, чего мне не хватает для запуска двух служб из одного exe?