Подтвердить что ты не робот

Как автоматически запустить службу после установки?

Как вы автоматически запускаете службу после запуска установки из проекта установки Visual Studio?

Я просто подумал об этом и подумал, что я поделюсь ответом на общее благо. Ответьте на это. Я открыт для других и лучших способов сделать это.

4b9b3361

Ответ 1

Добавьте в свой проект следующий класс.

using System.ServiceProcess;  

class ServInstaller : ServiceInstaller
{
    protected override void OnCommitted(System.Collections.IDictionary savedState)
    {
        ServiceController sc = new ServiceController("YourServiceNameGoesHere");
        sc.Start();
    }
}

Проект установки подберет класс и запустит вашу службу после завершения установки.

Ответ 2

Небольшое дополнение к принятому ответу:

Вы также можете получить имя службы как это: избегайте каких-либо проблем, если имя службы будет изменено в будущем:

protected override void OnCommitted(System.Collections.IDictionary savedState)
{
    new ServiceController(serviceInstaller1.ServiceName).Start();
}

(У каждого установщика есть ServiceProcessInstaller и ServiceInstaller. Здесь ServiceInstaller называется serviceInstaller1.)

Ответ 3

В этом подходе используется класс 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 в конструкторе.

Ответ 4

Спасибо, что запустили OK...

private System.ServiceProcess.ServiceInstaller serviceInstaller1;

private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
    ServiceController sc = new ServiceController("YourServiceName");
    sc.Start();
}

Ответ 5

Вместо создания собственного класса выберите установщик службы в установщике проекта и добавьте обработчик событий в событие 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();
    }
}

Он запустит вашу службу, только если тип запуска установлен на автоматический.

Ответ 6

На основе вышеописанных фрагментов мой файл 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();
        }
    }
}