Как вручную добавить установщик в службу Windows?

1

Я написал абстрактный класс "PollingServiceBase", который наследует от ServiceBase, чтобы написать службу Windows, у которой был метод переопределения Работа, выполняемая по таймеру, объявленному в конструкторе. Поэтому я пытаюсь проверить это, и я написал быстрый маленький класс, который каждую минуту записывает строку, включая datetime, в текстовый файл. Мне нужно установить эту службу, но когда я не могу использовать конструктор для "Add Installer", потому что PollingServiceBase является абстрактным. Так может ли кто-нибудь дать мне обходной путь или указать мне на ресурс, который показывает мне, как это сделать вручную?

Теги:
windows-services

1 ответ

0

Просто добавьте новый код в свою службу по коду:

ServiceInstaller installer = new ServiceInstaller();

И убедитесь, что вы правильно используете свойства.

Для более легкого способа я рекомендую посмотреть TopShelf. Это хорошая библиотека, чтобы написать службу Windows и сделать ее доступной через F5. По сути, это консольное приложение.

Вот некоторая информация о TopShelf:

http://topshelf-project.com/

Если вы все еще хотите придерживаться базовой реализации, вот какой код:

using (TransactedInstaller installer = new TransactedInstaller())
{
    string path = string.Format("/assemblypath={0}",
                  System.Reflection.Assembly.GetExecutingAssembly().Location);
    string[] arguments = { path };
    InstallContext context = new InstallContext("", arguments);

    using (ProjectInstaller projectInstaller = new ProjectInstaller())
    {
        installer.Installers.Add(projectInstaller);
    }

    installer.Context = context;
    installer.Install(new Hashtable());
}
  • 0
    Во-первых, мне нравится идея TopShelf. Я мог бы использовать это несколько месяцев назад. Я думаю, что моя проблема с этим для моей текущей ситуации заключается в том, что это похоже на бинты. Мне нужно, чтобы люди могли устанавливать свои собственные сервисы, которые унаследованы от моей PollingServiceBase. Я просматриваю код, который вы разместили, и надеюсь, вы простите мое незнакомство с предметом, но где бы я это реализовал? В моем сервисе, в базовом классе или в файле program.cs в сервисе?
  • 0
    В моем проекте это в запуске приложения. По сути, это консольное приложение, и когда первый аргумент командной строки - "/ install", код выше выполняется. Я не знаю вашей ситуации, но я думаю, что каждый из ваших клиентов, которые унаследуют ваш базовый класс, должен использовать этот код. Но вы можете встроить в свой базовый класс и позволить пользователям просто вызывать его из своей программы. Если не понятно, просто спросите :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню