Автоматический запуск службы Windows после установки - PullRequest
0 голосов
/ 11 ноября 2011

Какие из этих двух предпочтительны (и почему) из установщика службы, я видел оба упомянутых на разных сайтах (и здесь, на stackoverflow Автоматический запуск службы Windows при установке и Как автоматически запустить сервис после установки? ).

// Auto Start the Service Once Installation is Finished.
this.AfterInstall += (s, e) => new ServiceController("service").Start();
this.Committed += (s, e) => new ServiceController("service").Start();

Ответы [ 3 ]

2 голосов
/ 11 ноября 2011

Я считаю, что последнее немного более корректно (хотя быстрая проверка моей кодовой базы и я по сути закодировали первое). Разница, которую я вижу, в том, что существует вероятность отката На этапе фиксации у вас уже есть риск отката. Но если вы запускаете службу в AfterInstall (которая является лишь частью общей фазы установки (четыре фазы: установка, откат, фиксация, удаление)), вы можете выполнить откат последующим классом InstallerClass. Затем вам нужно будет остановить службу и удалить ее (что для вас делают классы установки службы Microsoft по умолчанию, так что это не большая проблема.

Таким образом, разница не слишком велика.

1 голос
/ 11 ноября 2011

Учитывая, что Committed поднимается после установки (то есть, только когда Install() вызовы завершены, и, следовательно, возникают связанные события (если они успешны)), тогда я бы сказал, что делать это в данный момент "наиболее безопасно". на самом деле, я уверен, что это последнее событие, связанное с установкой, и тем самым завершает полную установку.

Метод Commit вызывается, только если метод Install каждого Установщик в этом экземпляре InstallerCollection успешно выполняется.

Поскольку Commit собирает информацию, необходимую для удаления, и ее можно взломать и, следовательно, для вызова Rollback во время установки - вы могли бы возможно оказаться в затруднительном положении, если службы уже амбициозны выполняется до завершения, успешное выполнение.

0 голосов
/ 13 мая 2018

В C # в вашем сервисном проекте у вас будет класс установщика ProjectInstaller.cs, измените его, чтобы переопределить обработчик события AfterInstall для автоматического запуска сервиса, как показано ниже

[RunInstaller(true)]
public partial class ProjectInstaller : System.Configuration.Install.Installer
{
    public ProjectInstaller()
    {
        InitializeComponent();
    }

    protected override void OnAfterInstall(IDictionary savedState)
    {
        base.OnAfterInstall(savedState);
        using (System.ServiceProcess.ServiceController serviceController = new System.ServiceProcess.ServiceController(serviceInstaller1.ServiceName))
        {
            serviceController.Start();
        }
    }
}

Это автоматически запустит службу Windows после установки

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