Поделиться через


ServiceInstaller Класс

Определение

Устанавливает класс, который расширяется ServiceBase для реализации службы. Этот класс вызывается программой установки при установке приложения-службы.

public ref class ServiceInstaller : System::Configuration::Install::ComponentInstaller
public class ServiceInstaller : System.Configuration.Install.ComponentInstaller
type ServiceInstaller = class
    inherit ComponentInstaller
Public Class ServiceInstaller
Inherits ComponentInstaller
Наследование

Примеры

В следующем примере создается установщик проекта, который MyProjectInstallerнаследуется от Installer. Предполагается, что существует исполняемый файл службы, содержащий две службы, "Hello-World service 1" и "Hello-World Service 2". В конструкторе MyProjectInstaller (который будет вызываться программой установки), ServiceInstaller объекты создаются для каждой из этих служб и ServiceProcessInstaller создаются для исполняемого файла. Чтобы программа установки распознала MyProjectInstaller как допустимый установщик, RunInstallerAttribute атрибут имеет значение true.

Необязательные свойства задаются в установщике процесса и установщиках служб перед добавлением установщиков в коллекцию Installers . При доступе MyProjectInstallerк служебной программе установки объекты, добавленные в Installers коллекцию через вызов InstallerCollection.Add , будут установлены в свою очередь. В процессе установщик сохраняет сведения о состоянии, указывающие, какие объекты были установлены, поэтому каждый из них может быть сохранен в свою очередь, если происходит сбой установки.

Как правило, вы не создадите экземпляр класса установщика проекта явным образом. Вы создадите его и добавьте атрибут в RunInstallerAttribute синтаксис, но это программа установки, которая фактически вызывает и, следовательно, создает экземпляры класса.

#using <System.dll>
#using <System.ServiceProcess.dll>
#using <System.Configuration.Install.dll>

using namespace System;
using namespace System::Collections;
using namespace System::Configuration::Install;
using namespace System::ServiceProcess;
using namespace System::ComponentModel;

[RunInstaller(true)]
public ref class MyProjectInstaller : public Installer
{
private:
    ServiceInstaller^ serviceInstaller1;
    ServiceInstaller^ serviceInstaller2;
    ServiceProcessInstaller^ processInstaller;

public:
    MyProjectInstaller()
    {
        // Instantiate installers for process and services.
        processInstaller = gcnew ServiceProcessInstaller;
        serviceInstaller1 = gcnew ServiceInstaller;
        serviceInstaller2 = gcnew ServiceInstaller;

        // The services run under the system account.
        processInstaller->Account = ServiceAccount::LocalSystem;

        // The services are started manually.
        serviceInstaller1->StartType = ServiceStartMode::Manual;
        serviceInstaller2->StartType = ServiceStartMode::Manual;

        // ServiceName must equal those on ServiceBase derived classes.
        serviceInstaller1->ServiceName = "Hello-World Service 1";
        serviceInstaller2->ServiceName = "Hello-World Service 2";

        // Add installers to collection. Order is not important.
        Installers->Add( serviceInstaller1 );
        Installers->Add( serviceInstaller2 );
        Installers->Add( processInstaller );
    }

    static void Main()
    {
        Console::WriteLine("Usage: InstallUtil.exe [<service>.exe]");
    }
};

int main()
{
    MyProjectInstaller::Main();
}
using System;
using System.Collections;
using System.Configuration.Install;
using System.ServiceProcess;
using System.ComponentModel;

[RunInstaller(true)]
public class MyProjectInstaller : Installer
{
    private ServiceInstaller serviceInstaller1;
    private ServiceInstaller serviceInstaller2;
    private ServiceProcessInstaller processInstaller;

    public MyProjectInstaller()
    {
        // Instantiate installers for process and services.
        processInstaller = new ServiceProcessInstaller();
        serviceInstaller1 = new ServiceInstaller();
        serviceInstaller2 = new ServiceInstaller();

        // The services run under the system account.
        processInstaller.Account = ServiceAccount.LocalSystem;

        // The services are started manually.
        serviceInstaller1.StartType = ServiceStartMode.Manual;
        serviceInstaller2.StartType = ServiceStartMode.Manual;

        // ServiceName must equal those on ServiceBase derived classes.
        serviceInstaller1.ServiceName = "Hello-World Service 1";
        serviceInstaller2.ServiceName = "Hello-World Service 2";

        // Add installers to collection. Order is not important.
        Installers.Add(serviceInstaller1);
        Installers.Add(serviceInstaller2);
        Installers.Add(processInstaller);
    }

    public static void Main()
    {
        Console.WriteLine("Usage: InstallUtil.exe [<service>.exe]");
    }
}
Imports System.Collections
Imports System.Configuration.Install
Imports System.ServiceProcess
Imports System.ComponentModel

<RunInstallerAttribute(True)> _
Public Class MyProjectInstaller
    Inherits Installer
    Private serviceInstaller1 As ServiceInstaller
    Private serviceInstaller2 As ServiceInstaller
    Private processInstaller As ServiceProcessInstaller    
    
    Public Sub New()
        ' Instantiate installers for process and services.
        processInstaller = New ServiceProcessInstaller()
        serviceInstaller1 = New ServiceInstaller()
        serviceInstaller2 = New ServiceInstaller()
        
        ' The services will run under the system account.
        processInstaller.Account = ServiceAccount.LocalSystem
        
        ' The services will be started manually.
        serviceInstaller1.StartType = ServiceStartMode.Manual
        serviceInstaller2.StartType = ServiceStartMode.Manual
        
        ' ServiceName must equal those on ServiceBase derived classes.            
        serviceInstaller1.ServiceName = "Hello-World Service 1"
        serviceInstaller2.ServiceName = "Hello-World Service 2"
        
        ' Add installers to collection. Order is not important.
        Installers.Add(serviceInstaller1)
        Installers.Add(serviceInstaller2)
        Installers.Add(processInstaller)
    End Sub

    Public Shared Sub Main()
        Console.WriteLine("Usage: InstallUtil.exe [<service>.exe]")
    End Sub
End Class

Комментарии

Выполняется ServiceInstaller работа, связанная с службой, с которой она связана. Она используется программой установки для записи значений реестра, связанных со службой в подраздел в разделе реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Служба определяется по имени службы в этом подразделе. Подраздел также содержит имя исполняемого файла или .dll, к которому принадлежит служба.

Чтобы установить службу, создайте класс установщика проекта, наследующий от Installer класса, и задайте RunInstallerAttribute для него trueатрибут. В проекте создайте один ServiceProcessInstaller экземпляр для каждого приложения службы и один ServiceInstaller экземпляр для каждой службы в приложении. В конструкторе класса установщика проекта задайте свойства установки для службы с помощью ServiceProcessInstaller экземпляров и ServiceInstaller экземпляров и добавьте экземпляры в коллекцию Installers .

Замечание

Рекомендуется использовать конструктор для добавления экземпляров установщика; Однако если необходимо добавить Installers в коллекцию в Install методе, обязательно выполните те же дополнения к коллекции в методе Uninstall .

Для всех классов, производных от Installer класса, состояние Installers коллекции должно быть одинаковым в Install и Uninstall методах. Однако при добавлении экземпляров Installers установщика в коллекцию в конструктор пользовательского класса установщика можно избежать обслуживания коллекции.InstallUninstall При вызове служебной программы установки он ищет RunInstallerAttribute атрибут. Если атрибут задан true, программа устанавливает все службы, которые были добавлены в Installers коллекцию, связанную с установщиком проекта. Если RunInstallerAttribute он false не существует, программа установки игнорирует установщик проекта.

Связанный ServiceProcessInstaller с классом установки проекта устанавливает сведения, общие для всех ServiceInstaller экземпляров проекта. Если эта служба содержит все, что отделяет ее от других служб в проекте установки, эта информация для конкретной службы устанавливается этим методом.

Замечание

Важно, чтобы ServiceName класс, производный от ServiceBaseнего, был идентиченServiceBase.ServiceName. Как правило, значение ServiceBase.ServiceName свойства для службы задается в функции Main() исполняемого файла приложения-службы. Диспетчер управления службами использует ServiceInstaller.ServiceName свойство для поиска службы в этом исполняемом файле.

Вы можете изменить другие свойства в ServiceInstaller предварительной или после добавления его в Installers коллекцию установщика проекта. Например, служба может быть настроена для автоматического запуска службы StartType при перезагрузке или необходимости запуска службы вручную.

Как правило, методы ServiceInstaller в коде не вызываются. Обычно они вызываются только служебной программой установки. Программа установки автоматически вызывает ServiceProcessInstaller.Install методы и ServiceInstaller.Install методы во время установки. При необходимости он возвращает сбои, вызывая Rollback (или ServiceInstaller.Rollback) на всех ранее установленных компонентах.

Программа установки вызывает Uninstall удаление объекта.

Подпрограмма установки приложения автоматически сохраняет сведения о компонентах, уже установленных, с помощью установщика Installer.Contextпроекта. Эти сведения о состоянии постоянно обновляются как ServiceProcessInstaller экземпляр, и каждый ServiceInstaller экземпляр устанавливается служебной программой. Обычно для кода не требуется изменять сведения о состоянии явным образом.

При выполнении установки он автоматически создает EventLogInstaller источник журнала событий, связанный с производным классом ServiceBase . Свойство Log для этого источника задается конструктором ServiceInstaller в журнале приложений компьютера. Если задать ServiceNameServiceInstaller значение (которое должно совпадать со ServiceBase.ServiceName службой), Source он автоматически задается таким же значением. При сбое установки установка источника выполняется откатом вместе с ранее установленными службами.

Метод Uninstall пытается остановить службу, если она запущена. Выполняется ли это успешно или нет, Uninstall отменяет внесенные Installизменения. Если для ведения журнала событий создан новый источник, источник удаляется.

Конструкторы

Имя Описание
ServiceInstaller()

Инициализирует новый экземпляр класса ServiceInstaller.

Свойства

Имя Описание
CanRaiseEvents

Возвращает значение, указывающее, может ли компонент вызвать событие.

(Унаследовано от Component)
Container

Возвращает объект IContainer , содержащий Componentобъект .

(Унаследовано от Component)
Context

Возвращает или задает сведения о текущей установке.

(Унаследовано от Installer)
DelayedAutoStart

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

Description

Возвращает или задает описание службы.

DesignMode

Возвращает значение, указывающее, находится ли текущий Component режим разработки.

(Унаследовано от Component)
DisplayName

Указывает понятное имя, определяющее службу пользователю.

Events

Возвращает список обработчиков событий, подключенных к этому Component.

(Унаследовано от Component)
HelpText

Возвращает текст справки для всех установщиков в коллекции установщиков.

(Унаследовано от Installer)
Installers

Возвращает коллекцию установщиков, содержащихся в этом установщике.

(Унаследовано от Installer)
Parent

Возвращает или задает установщик, содержащий коллекцию, к которой принадлежит этот установщик.

(Унаследовано от Installer)
ServiceName

Указывает имя, используемое системой для идентификации этой службы. Это свойство должно быть идентичным ServiceName службе, которую требуется установить.

ServicesDependedOn

Указывает службы, которые должны выполняться для выполнения этой службы.

Site

Возвращает или задает ISite объект Component.

(Унаследовано от Component)
StartType

Указывает, как и когда эта служба запущена.

Методы

Имя Описание
Commit(IDictionary)

При переопределении в производном классе завершает транзакцию установки.

(Унаследовано от Installer)
CopyFromComponent(IComponent)

Копирует свойства из экземпляра этого установщика ServiceBase .

CreateObjRef(Type)

Создает объект, содержащий все соответствующие сведения, необходимые для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

(Унаследовано от MarshalByRefObject)
Dispose()

Освобождает все ресурсы, используемые параметром Component.

(Унаследовано от Component)
Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые Component и при необходимости освобождает управляемые ресурсы.

(Унаследовано от Component)
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetLifetimeService()
Устаревшие..

Извлекает текущий объект службы времени существования, который управляет политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
GetService(Type)

Возвращает объект, представляющий службу, предоставляемую Component или ее Container.

(Унаследовано от Component)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
InitializeLifetimeService()
Устаревшие..

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
Install(IDictionary)

Устанавливает службу, записывая сведения о приложении-службе в реестр. Этот метод предназначен для использования средствами установки, которые обрабатывают соответствующие методы автоматически.

IsEquivalentInstaller(ComponentInstaller)

Указывает, будут ли два установщика устанавливать одну и ту же службу.

MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
MemberwiseClone(Boolean)

Создает неглубокую копию текущего MarshalByRefObject объекта.

(Унаследовано от MarshalByRefObject)
OnAfterInstall(IDictionary)

Вызывает событие AfterInstall.

(Унаследовано от Installer)
OnAfterRollback(IDictionary)

Вызывает событие AfterRollback.

(Унаследовано от Installer)
OnAfterUninstall(IDictionary)

Вызывает событие AfterUninstall.

(Унаследовано от Installer)
OnBeforeInstall(IDictionary)

Вызывает событие BeforeInstall.

(Унаследовано от Installer)
OnBeforeRollback(IDictionary)

Вызывает событие BeforeRollback.

(Унаследовано от Installer)
OnBeforeUninstall(IDictionary)

Вызывает событие BeforeUninstall.

(Унаследовано от Installer)
OnCommitted(IDictionary)

Вызывает событие Committed.

(Унаследовано от Installer)
OnCommitting(IDictionary)

Вызывает событие Committing.

(Унаследовано от Installer)
Rollback(IDictionary)

Откат сведений о приложении службы, записанных в реестр процедурой установки. Этот метод предназначен для использования средствами установки, которые обрабатывают соответствующие методы автоматически.

ToString()

String Возвращает имя, содержащее имя , если таковое Componentимеется. Этот метод не должен быть переопределен.

(Унаследовано от Component)
Uninstall(IDictionary)

Удаляет службу, удалив сведения об этом из реестра.

События

Имя Описание
AfterInstall

Происходит после Install(IDictionary) запуска методов всех установщиков в свойстве Installers .

(Унаследовано от Installer)
AfterRollback

Происходит после отката всех установщиков в свойстве Installers .

(Унаследовано от Installer)
AfterUninstall

Происходит после выполнения всех установщиков в свойстве Installers операций удаления.

(Унаследовано от Installer)
BeforeInstall

Происходит перед запуском Install(IDictionary) метода каждого установщика в коллекции установщика.

(Унаследовано от Installer)
BeforeRollback

Происходит до отката установщиков в Installers свойстве.

(Унаследовано от Installer)
BeforeUninstall

Происходит до выполнения установщиками в свойстве Installers операций удаления.

(Унаследовано от Installer)
Committed

Происходит после того, как все установщики в свойстве Installers зафиксировали свои установки.

(Унаследовано от Installer)
Committing

Происходит до того, как установщики в свойстве Installers фиксируют их установки.

(Унаследовано от Installer)
Disposed

Происходит при удалении компонента вызовом Dispose() метода.

(Унаследовано от Component)

Применяется к

См. также раздел