Это на самом деле довольно просто.Я использовал его во многих моих собственных сервисах (фактически, ВСЕ мои сервисы способны самостоятельно устанавливать / удалять). Я управляю им с помощью переключателя командной строки, например /install
или /uninstall
.
Установка выполняется следующим образом:
private static void InstallService()
{
var ti = new System.Configuration.Install.TransactedInstaller();
var si = new MyServiceInstaller();
var cl = new string[] { string.Format(CultureInfo.InvariantCulture, "/assemblypath={0}", System.Reflection.Assembly.GetExecutingAssembly().Location) };
var ctx = new System.Configuration.Install.InstallContext(null, cl);
ti.Installers.Add(si);
ti.Context = ctx;
ti.Install(new Hashtable());
}
Удаление такое же, за исключением того, что вы звоните ti.Uninstall(null);
вместо ti.Install(...);
.
Мой MyServiceInstaller
это класс, который наследуется от класса System.Configuration.Install.Installer
(как это обычно делается в службе).