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 服务 1”和“Hello-World 服务 2”。 在将由安装实用工具) 调用 (的构造函数MyProjectInstaller中,ServiceInstaller为每个服务创建对象,并为可执行文件创建 。ServiceProcessInstaller 对于要识别 MyProjectInstaller 为有效安装程序的安装实用工具,属性 RunInstallerAttribute 设置为 true

在将安装程序添加到 Installers 集合之前,将在进程安装程序和服务安装程序上设置可选属性。 当安装实用工具访问 MyProjectInstaller时,将依次安装通过 调用 InstallerCollection.Add 添加到Installers集合的对象。 在此过程中,安装程序维护状态信息,指示已安装了哪些对象,因此,如果安装失败,可以依次备份每个对象。

通常,不会显式创建项目安装程序类的实例。 可以创建它并将 属性添加到 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注册表项中的子项。 服务在此子项中由其 ServiceName 标识。 子项还包括服务所属的可执行文件或.dll的名称。

若要安装服务,请创建继承自 Installer 类的项目安装程序类,并将 类上的 属性设置为 RunInstallerAttributetrue。 在项目中,为每个服务应用程序创建一个 ServiceProcessInstaller 实例,并为应用程序中的每个服务创建一个 ServiceInstaller 实例。 在项目安装程序类构造函数中,使用 ServiceProcessInstallerServiceInstaller 实例设置服务的安装属性,并将实例添加到集合中 Installers

注意

建议使用 构造函数添加安装程序实例;但是,如果需要在 方法中将 添加到 Installers 集合, Install 请确保在 方法中 Uninstall 对集合执行相同的添加。

对于派生自 Installer 类的所有类,集合的状态Installers在 和 Uninstall 方法中Install必须相同。 但是,如果在自定义安装程序类构造函数中将安装程序实例添加到Installers集合,则可以避免跨 InstallUninstall 方法维护集合。调用安装实用工具时,它会查找 RunInstallerAttribute 属性。 如果 属性为 true,则实用工具将安装已添加到集合的所有服务, Installers 这些服务与项目安装程序相关联。 如果 RunInstallerAttributefalse 或 不存在,则安装实用工具将忽略项目安装程序。

ServiceProcessInstaller与项目安装类关联的 将安装项目中所有ServiceInstaller实例通用的信息。 如果此服务具有将其与安装项目中其他服务分开的任何内容,则通过此方法安装该服务特定的信息。

注意

与派生自 ServiceBase的类的 相同ServiceBase.ServiceName至关重要ServiceName。 通常,服务的 属性的值 ServiceBase.ServiceName 是在服务应用程序的可执行文件的 Main () 函数中设置的。 服务控制管理器使用 ServiceInstaller.ServiceName 属性来查找此可执行文件中的服务。

可以在 将 添加到项目安装程序的集合之前或之后修改 上的Installers其他属性ServiceInstaller。 例如,可以将服务的 StartType 设置为在重新启动时自动启动服务,或者要求用户手动启动该服务。

通常,不会在代码中调用方法 ServiceInstaller ;通常仅由安装实用工具调用。 安装实用工具在安装过程中自动调用 ServiceProcessInstaller.InstallServiceInstaller.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

获取包含 IContainerComponent

(继承自 Component)
Context

获取或设置关于当前安装的信息。

(继承自 Installer)
DelayedAutoStart

获取或设置一个值,该值指示是否应延迟启动该服务,直到运行其他自动启动的服务。

Description

获取或设置服务的说明。

DesignMode

获取一个值,用以指示 Component 当前是否处于设计模式。

(继承自 Component)
DisplayName

指示向用户标识服务的友好名称。

Events

获取附加到此 Component 的事件处理程序的列表。

(继承自 Component)
HelpText

获取安装程序集合中所有安装程序的帮助文字。

(继承自 Installer)
Installers

获取该安装程序包含的安装程序的集合。

(继承自 Installer)
Parent

获取或设置包含该安装程序所属的集合的安装程序。

(继承自 Installer)
ServiceName

指示系统用于标识此服务的名称。 此属性必须与要安装的服务的 ServiceName 相同。

ServicesDependedOn

指示为使该服务能够运行而必须正在运行的服务。

Site

获取或设置 ComponentISite

(继承自 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()

返回包含 Component 的名称的 String(如果有)。 不应重写此方法。

(继承自 Component)
Uninstall(IDictionary)

通过从注册表中移除关于服务的信息来卸载服务。

事件

AfterInstall

Installers 属性中的所有安装程序的 Install(IDictionary) 方法都运行后发生。

(继承自 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)

适用于

另请参阅