Как вы автоматически запускаете службу после запуска установки из проекта установки Visual Studio?
Я просто подумал об этом и подумал, что я поделюсь ответом на общее благо. Ответьте на это. Я открыт для других и лучших способов сделать это.
Как вы автоматически запускаете службу после запуска установки из проекта установки Visual Studio?
Я просто подумал об этом и подумал, что я поделюсь ответом на общее благо. Ответьте на это. Я открыт для других и лучших способов сделать это.
Добавьте в свой проект следующий класс.
using System.ServiceProcess;
class ServInstaller : ServiceInstaller
{
protected override void OnCommitted(System.Collections.IDictionary savedState)
{
ServiceController sc = new ServiceController("YourServiceNameGoesHere");
sc.Start();
}
}
Проект установки подберет класс и запустит вашу службу после завершения установки.
Небольшое дополнение к принятому ответу:
Вы также можете получить имя службы как это: избегайте каких-либо проблем, если имя службы будет изменено в будущем:
protected override void OnCommitted(System.Collections.IDictionary savedState)
{
new ServiceController(serviceInstaller1.ServiceName).Start();
}
(У каждого установщика есть ServiceProcessInstaller и ServiceInstaller. Здесь ServiceInstaller называется serviceInstaller1.)
В этом подходе используется класс Installer и наименьший объем кода.
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;
namespace MyProject
{
[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
public ProjectInstaller()
{
InitializeComponent();
serviceInstaller1.AfterInstall += (sender, args) => new ServiceController(serviceInstaller1.ServiceName).Start();
}
}
}
Определите serviceInstaller1
(введите ServiceInstaller) в конструкторе класса Installer, а также установите его свойство ServiceName
в конструкторе.
Спасибо, что запустили OK...
private System.ServiceProcess.ServiceInstaller serviceInstaller1;
private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
ServiceController sc = new ServiceController("YourServiceName");
sc.Start();
}
Вместо создания собственного класса выберите установщик службы в установщике проекта и добавьте обработчик событий в событие Comited:
private void serviceInstallerService1_Committed(object sender, InstallEventArgs e)
{
var serviceInstaller = sender as ServiceInstaller;
// Start the service after it is installed.
if (serviceInstaller != null && serviceInstaller.StartType == ServiceStartMode.Automatic)
{
var serviceController = new ServiceController(serviceInstaller.ServiceName);
serviceController.Start();
}
}
Он запустит вашу службу, только если тип запуска установлен на автоматический.
На основе вышеописанных фрагментов мой файл ProjectInstaller.cs оказался таким же, как для службы с именем FSWServiceMgr.exe. Служба начала работу после установки. В качестве примечания не забудьте щелкнуть вкладку "Свойства" (не щелкнуть правой кнопкой мыши), когда проект настройки выбран в обозревателе решений, чтобы установить компанию и т.д.
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;
namespace FSWManager {
[RunInstaller(true)]
public partial class ProjectInstaller : Installer {
public ProjectInstaller() {
InitializeComponent();
this.FSWServiceMgr.AfterInstall += FSWServiceMgr_AfterInstall;
}
static void FSWServiceMgr_AfterInstall(object sender, InstallEventArgs e) {
new ServiceController("FSWServiceMgr").Start();
}
}
}