.Net windows services: установить из указанной сборки - PullRequest
2 голосов
/ 30 ноября 2010

Существует множество примеров того, как установить службу Windows в одну строку:

    ManagedInstallClass.InstallHelper(
      new[] { Assembly.GetExecutingAssembly().Location });

Это прекрасно работает, пока класс обслуживания не объявлен в модуле exe.Но тот же код не работает для меня, если класс обслуживания находится в ссылочной сборке (не объявлено в исполняемом файле, но в связанной DLL).

В таком случае служба также регистрируется, но не может быть запущена, так как она зарегистрирована с помощью пути dll и указывает на dll (сообщение «служба не является исполняемым файлом win32» появляется в журнале событий, когда я пытаюсьначните с этого)

Если я изменю GetExecutingAssembly().Location на путь к исполняемому файлу, установщики не будут найдены и служба вообще не будет зарегистрирована.

Можно ли поместить класс обслуживания в указанную сборку и при этом иметь возможность зарегистрировать службу с минимальными усилиями?

Заранее спасибо!

1 Ответ

3 голосов
/ 30 ноября 2010

Вот код C #, который позволяет устанавливать / удалять службу «вручную» (без необходимости объявлять пользовательские атрибуты RunInstaller):

static void InstallService(string path, string name, string displayName, string description)
{
    ServiceInstaller si = new ServiceInstaller();
    ServiceProcessInstaller spi = new ServiceProcessInstaller();
    si.Parent = spi;
    si.DisplayName = displayName;
    si.Description = description;
    si.ServiceName = name;
    si.StartType = ServiceStartMode.Manual;

    // update this if you want a different log
    si.Context = new InstallContext("install.log", null);
    si.Context.Parameters["assemblypath"] = path;

    IDictionary stateSaver = new Hashtable();
    si.Install(stateSaver);
}

static void UninstallService(string name)
{
    ServiceInstaller si = new ServiceInstaller();
    ServiceProcessInstaller spi = new ServiceProcessInstaller();
    si.Parent = spi;
    si.ServiceName = name;

    // update this if you want a different log
    si.Context = new InstallContext("uninstall.log", null);
    si.Uninstall(null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...