У меня есть служба 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#.
Как действовать дальше?