Я начну с примера: веб-сервер Apache (под Windows) имеет приятную функцию: он может запускаться как автономное приложение (с текущими правами пользователей) и что его можно установить и запустить как окно (как локальная системная учетная запись), используя тот же исполняемый файл.
Чтобы приложение запускалось как отдельное приложение, все, что ему нужно сделать, это в том же порядке, что и статический public Main() в каком-то публичном классе.
Чтобы приложение могло быть установлено и выполняться как служба, оно должно определенным образом выполнять классы 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);
}
}
Мой язык выбора - С#.
Изменить: В настоящее время я отформатировал общий код в отдельной сборке (позвольте мне его вызвать Library.dll), и у меня есть два исполняемых файла: Console.exe и Service.exe, которые являются автономными и windows сервисные приложения, соответственно, и оба являются просто средством вызова Library.dll.
Моя цель состоит в том, чтобы объединить эти два исполняемых файла в один, который все равно вызовет библиотеку Library.dll.