Как установить службу Windows без расширения установщика? - PullRequest
1 голос
/ 26 января 2010

Я создаю фреймворк многократного использования для построения сервисов планирования с использованием .NET Framework. Мой код распространяется как библиотека, на которую пользователь ссылается в консольном приложении. В основной точке входа приложения пользователю предлагается передать управление статическому методу в библиотеке, который начнет планирование заданий при работе в неинтерактивном режиме, альтернативно прочитает аргументы команд и выполнит задачи обслуживания, такие как установка.

Чтобы установить приложение в качестве службы Windows с использованием пространства имен System.Configuration.Install, пользователь должен будет добавить потомок класса Installer в сборку приложения, сообщая платформе, как установить службу. Я действительно предпочел бы сделать это раз и навсегда в библиотеке, но, к сожалению, класс установки имеет в сборке приложения.

Решение, которое я сейчас рассматриваю, включает в себя определение класса установщика в библиотеке и требование, чтобы пользователь унаследовал это в общедоступном классе, без добавления какого-либо дополнительного кода. В то время как это работает, пользователю необходимо написать раздражающий код котельной плиты.

Каковы альтернативы расширению Installer? Могу ли я получить доступ к инфраструктуре управляемой установки более прямым способом?

Ответы [ 2 ]

3 голосов
/ 26 января 2010

Я использую SC.exe для регистрации двоичного файла службы.

При этом остается только эта заглушка в классе установщика службы:

[RunInstaller(true)]
public partial class SoapSenderInstaller : Installer
{
    public SoapSenderInstaller()
    {
        InitializeComponent();
    }
}

Вызов SC.exe очень прост:

sc create MyService binpath= "C:\Path\to\my\MyService.exe" DisplayName= "My Service Display Name" depend= MSMQ start= auto

Единственный недостаток - это то, как sc.exe ожидает аргументы командной строки:

binpath=[BLANK]"MyService.exe"

EDIT

Конечно, это решение не соответствует требованию о том, что пользователю не нужно создавать какой-либо код, который делает его двоичный файл службой Windows, потому что если он просто ссылается на вашу библиотеку, ему все равно придется наследовать от ServiceBase и реализовать OnStart () и OnStop ().

0 голосов
/ 26 января 2010

Я знаю, что вы можете добавить некоторые пользовательские поля в установщик и требовать ввода данных пользователем во время установки, если вы компилируете его с помощью Installer.CodeEffects.com.Может быть, запрашивая пространство имен или имя типа в качестве строкового ввода от конечного пользователя, вы можете загружать или вызывать вещи, которые вам нужны, на лету во время выполнения?ваша ситуация.

...