Установите сервис с пользовательским именем сервиса, используя AssemblyInstaller - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть служба windows, которая устанавливается с помощью AssemblyInstaller. Пока это работает очень хорошо.

Для тестирования я бы хотел изменить ServiceName, чтобы избежать конфликтов. Я не могу найти способ сделать это все же. Поскольку ссылка работает через сборку, я не имею никакого контроля над WinServiceInstaller. Я не вижу способа вложить в него что-либо. AssemblyInstaller также не позволяет изменять имена.

Мой код:

using (var inst = new AssemblyInstaller(typeof(WindowsService).Assembly, commandLine: null))
{
    IDictionary state = new Hashtable();
    inst.UseNewContext = true;
    try
    {
        inst.Install(state);
        inst.Commit(state);
    }
    catch
    {
        try
        {
            inst.Rollback(state);
        }
        catch (Exception ex)
        {
            logger.Error(m => m(Resource.ExceptionOnRollback, ex.Message, ex.StackTrace));
        }
        throw;
    }
}

Это класс в сборке WindowsService:

[System.ComponentModel.DesignerCategory("Code")]
[RunInstaller(true)]
public class WinServiceInstaller : Installer
{
    public const string ServiceName = "ServiceName";
    private const string DisplayName = "DisplayName";
    private const string Description = "Description";

    private readonly ServiceProcessInstaller process;
    private readonly ServiceInstaller service;

    public WinServiceInstaller()
    {
        process = new ServiceProcessInstaller
        {
            Account = ServiceAccount.LocalSystem
        };
        service = new ServiceInstaller
        {
            ServiceName = ServiceName,
            DisplayName = DisplayName,
            Description = Description,
            StartType = ServiceStartMode.Automatic
        };

        Installers.Add(process);
        Installers.Add(service);
    }

}

Я искал и нашел другие решения, но они использовали s c .exe или Installutil.exe напрямую. Я предпочитаю чистое решение c#.

Как действовать дальше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...