Как сделать так, чтобы .NET Windows Service запускался сразу после установки?

Кроме service.StartType = ServiceStartMode.Automatic мой сервис не запускается после установки

Решение

Вставил этот код в мой ProjectInstaller

protected override void OnAfterInstall(System.Collections.IDictionary savedState)
{
    base.OnAfterInstall(savedState);
    using (var serviceController = new ServiceController(this.serviceInstaller1.ServiceName, Environment.MachineName))
        serviceController.Start();
}

Спасибо Скотту и Фрэнсису Б.

83 голоса | спросил Jader Dias 28 J000000Tuesday09 2009, 21:13:46

7 ответов


0

Вы можете сделать все это из исполняемого файла службы в ответ на события, инициированные процессом InstallUtil. Переопределите событие OnAfterInstall, чтобы использовать класс ServiceController для запуска службы.

http://msdn.microsoft.com/en- нас /библиотека /system.serviceprocess.serviceinstaller.aspx

ответил ScottTx 28 J000000Tuesday09 2009, 21:42:13
0

Visual Studio

Если вы создаете проект установки с VS, вы можете создать настраиваемое действие, которое вызвало метод .NET для запуска службы. Но на самом деле не рекомендуется использовать управляемые пользовательские действия в MSI. Посетите эту страницу .

ServiceController controller  = new ServiceController();
controller.MachineName = "";//The machine where the service is installed;
controller.ServiceName = "";//The name of your service installed in Windows Services;
controller.Start();

InstallShield или Wise

Если вы используете InstallShield или Wise, эти приложения предоставляют возможность запуска службы. В соответствии с примером с Wise, вы должны добавить действие управления службой. В этом действии вы указываете, хотите ли вы запускать или останавливать службу.

Wix

Используя Wix, вам нужно добавить следующий xml-код в компонент вашего сервиса. Для получения дополнительной информации об этом вы можете проверить эту страницу . .

<ServiceInstall 
    Id="ServiceInstaller"  
    Type="ownProcess"  
    Vital="yes"  
    Name=""  
    DisplayName=""  
    Description=""  
    Start="auto"  
    Account="LocalSystem"   
    ErrorControl="ignore"   
    Interactive="no">  
        <ServiceDependency Id="????"/> ///Add any dependancy to your service  
</ServiceInstall>
ответил Francis B. 28 J000000Tuesday09 2009, 21:38:04
0

Необходимо добавить настраиваемое действие в конец последовательности «ExecuteImmediate» в MSI, используя имя компонента EXE или пакет (sc start) в качестве источника. Я не думаю, что это можно сделать с помощью Visual Studio, для этого вам, возможно, придется использовать настоящий инструмент MSI-авторинга.

ответил Otávio Décio 28 J000000Tuesday09 2009, 21:20:26
0

Чтобы запустить его сразу после установки, я создаю командный файл с помощью installutil, после чего запускается sc start

Это не идеально, но работает ....

ответил Matt 28 J000000Tuesday09 2009, 21:20:22
0

Используйте класс .NET ServiceController для его запуска или введите команду командной строки для его запуска - «net start servicename». В любом случае работает.

ответил ScottTx 28 J000000Tuesday09 2009, 21:21:11
0

Чтобы добавить ответ ScottTx, вот фактический код для запуска службы, если вы делаете это, способ Microsoft (т. Е. С использованием проекта установки и т. Д.)

(извините за код VB.net, но это то, с чем я застрял)

Private Sub ServiceInstaller1_AfterInstall(ByVal sender As System.Object, ByVal e As System.Configuration.Install.InstallEventArgs) Handles ServiceInstaller1.AfterInstall
    Dim sc As New ServiceController()
    sc.ServiceName = ServiceInstaller1.ServiceName

    If sc.Status = ServiceControllerStatus.Stopped Then
        Try
            ' Start the service, and wait until its status is "Running".
            sc.Start()
            sc.WaitForStatus(ServiceControllerStatus.Running)

            ' TODO: log status of service here: sc.Status
        Catch ex As Exception
            ' TODO: log an error here: "Could not start service: ex.Message"
            Throw
        End Try
    End If
End Sub

Чтобы создать описанный выше обработчик событий, перейдите в конструктор ProjectInstaller, где находятся 2 элемента управления. Нажмите на элемент управления ServiceInstaller1. Перейдите в окно свойств под событиями, и там вы найдете событие AfterInstall.

Примечание. Не помещайте указанный выше код в событие AfterInstall для ServiceProcessInstaller1. Это не сработает, исходя из опыта. :)

ответил goku_da_master 27 +04002011-10-27T21:13:23+04:00312011bEurope/MoscowThu, 27 Oct 2011 21:13:23 +0400 2011, 21:13:23
0

Самое простое решение можно найти здесь @ Hoàng Long

@echo OFF
echo Stopping old service version...
net stop "[YOUR SERVICE NAME]"
echo Uninstalling old service version...
sc delete "[YOUR SERVICE NAME]"

echo Installing service...
rem DO NOT remove the space after "binpath="!
sc create "[YOUR SERVICE NAME]" binpath= "[PATH_TO_YOUR_SERVICE_EXE]" start= auto
echo Starting server complete
pause
ответил Robert Green MBA 3 PMpMon, 03 Apr 2017 18:31:35 +030031Monday 2017, 18:31:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132