ServiceProcessInstaller 类

定义

安装一个可执行文件,该文件包含扩展 ServiceBase 的类。 该类由安装实用工具(如 InstallUtil.exe)在安装服务应用程序时调用。

public ref class ServiceProcessInstaller : System::Configuration::Install::ComponentInstaller
public class ServiceProcessInstaller : System.Configuration.Install.ComponentInstaller
type ServiceProcessInstaller = class
    inherit ComponentInstaller
Public Class ServiceProcessInstaller
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

注解

ServiceProcessInstaller 可执行文件中的所有服务都是通用的。 安装实用工具使用它来编写与要安装的服务关联的注册表值。

若要安装服务,请创建继承自 Installer的项目安装程序类,并将 类上的 设置为 RunInstallerAttributetrue。 在项目中,为每个服务应用程序实例化一个 ServiceProcessInstaller 实例,为应用程序中的每个服务实例实例一个 ServiceInstaller 实例。 最后,将 ServiceProcessInstaller 实例和 ServiceInstaller 实例添加到项目安装程序类。

InstallUtil.exe运行时,实用工具在服务程序集 RunInstallerAttribute 中查找设置为 true的类。 通过将类添加到与项目安装程序关联的集合, Installers 将它们添加到服务程序集。 如果 RunInstallerAttributefalse,则安装实用工具将忽略项目安装程序。

对于 的 ServiceProcessInstaller实例,可以修改的属性包括指定服务应用程序在登录用户以外的帐户下运行。 可以指定服务应在其下运行的特定 UsernamePassword 对,也可以使用 Account 指定服务在计算机的系统帐户、本地或网络服务帐户或用户帐户下运行。

注意

计算机的系统帐户与管理员帐户不同。

通常,不会在代码中调用 方法 ServiceInstaller ;通常仅由安装实用工具调用。 安装实用工具在安装过程中自动调用 ServiceProcessInstaller.InstallServiceInstaller.Install 方法。 如有必要,它会通过在以前安装的所有组件上调用 Rollback (或 ServiceInstaller.Rollback) 来备份失败。

应用程序的安装例程使用项目安装程序 Installer.Context的 自动维护有关已安装组件的信息。 此状态信息会作为实例持续更新, ServiceProcessInstaller 每个 ServiceInstaller 实例都由 实用工具安装。 通常不需要代码显式修改此状态信息。

实例化 会导致 ServiceProcessInstaller 调用基类构造函数 ComponentInstaller

构造函数

ServiceProcessInstaller()

创建 ServiceProcessInstaller 类的新实例。

属性

Account

获取或设置运行该服务应用程序时所使用的帐户类型。

CanRaiseEvents

获取一个指示组件是否可以引发事件的值。

(继承自 Component)
Container

获取包含 IContainerComponent

(继承自 Component)
Context

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

(继承自 Installer)
DesignMode

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

(继承自 Component)
Events

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

(继承自 Component)
HelpText

获取为服务安装选项显示的帮助文本。

Installers

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

(继承自 Installer)
Parent

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

(继承自 Installer)
Password

获取或设置与运行服务应用程序时所使用用户帐户关联的密码。

Site

获取或设置 ComponentISite

(继承自 Component)
Username

获取或设置运行服务应用程序时将使用的用户帐户。

方法

Commit(IDictionary)

在派生类中重写时,完成安装事务。

(继承自 Installer)
CopyFromComponent(IComponent)

在没有 CopyFromComponent(IComponent) 类特定行为的情况下实现基类 ServiceProcessInstaller 方法。

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)

确定指定的安装程序是否与此安装程序安装相同的对象。

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

在派生类中重写时,移除安装。

(继承自 Installer)

事件

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)

适用于

另请参阅