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


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 .

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

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

Примечание

Очень важно, чтобы ServiceNameServiceBase.ServiceName класс был идентичен классу, наследуемого из ServiceBase. Обычно значение 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 в журнале приложений компьютера. При установке ServiceName объекта ServiceInstaller (который должен быть идентичен свойству 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)

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

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