Я начну с примера: веб-сервер Apache (под Windows) имеет приятную особенность: его можно запускать как отдельное приложение (с правами текущих пользователей), а также устанавливать и запускать как windowsобслуживать напрямую (как локальная системная учетная запись), используя тот же исполняемый файл.
Для того чтобы приложение запускалось как отдельное приложение, все, что ему нужно сделать, - это использовать статический public Main () в некоторых publicclass.
Чтобы приложение можно было установить и запустить как службу, оно должно определенным образом реализовать классы ServiceBase и Installer.Но если приложение, подобное этому, запускается как автономное приложение, оно отобразит окно сообщения.
Как можно добиться такого режима работы, подобного Apache?Я считаю, что решение простое, но у меня нет идеи, с чего начать.
Часть кода, которая следует, используется для вызова службы.Можно ли его изменить, чтобы разрешить автономное использование?
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service() // defined elsewhere as Service : ServiceBase
};
ServiceBase.Run(ServicesToRun);
}
}
Мой язык выбора - C #.
Редактировать: В настоящее время я абстрагировал общий код в отдельную сборку (давайте назовем его Library.dll), и у меня есть два исполняемых файла: Console.exe и Service.exe, которые являются автономными приложениями и приложениями службы Windows, соответственно, и оба являются всего лишь средством для вызова Library.dll.
MyЦель состоит в том, чтобы объединить эти два исполняемых файла в один, который все равно будет вызывать Library.dll.