ServiceProcessInstaller 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
安装一个可执行文件,该文件包含扩展 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 将它们添加到服务程序集。 如果 RunInstallerAttribute 为 false
,则安装实用工具将忽略项目安装程序。
对于 的 ServiceProcessInstaller实例,可以修改的属性包括指定服务应用程序在登录用户以外的帐户下运行。 可以指定服务应在其下运行的特定 Username 和 Password 对,也可以使用 Account 指定服务在计算机的系统帐户、本地或网络服务帐户或用户帐户下运行。
注意
计算机的系统帐户与管理员帐户不同。
通常,不会在代码中调用 方法 ServiceInstaller ;通常仅由安装实用工具调用。 安装实用工具在安装过程中自动调用 ServiceProcessInstaller.Install 和 ServiceInstaller.Install 方法。 如有必要,它会通过在以前安装的所有组件上调用 Rollback (或 ServiceInstaller.Rollback) 来备份失败。
应用程序的安装例程使用项目安装程序 Installer.Context的 自动维护有关已安装组件的信息。 此状态信息会作为实例持续更新, ServiceProcessInstaller 每个 ServiceInstaller 实例都由 实用工具安装。 通常不需要代码显式修改此状态信息。
实例化 会导致 ServiceProcessInstaller 调用基类构造函数 ComponentInstaller。
构造函数
ServiceProcessInstaller() |
创建 ServiceProcessInstaller 类的新实例。 |
属性
Account |
获取或设置运行该服务应用程序时所使用的帐户类型。 |
CanRaiseEvents |
获取一个指示组件是否可以引发事件的值。 (继承自 Component) |
Container |
获取包含 IContainer 的 Component。 (继承自 Component) |
Context |
获取或设置关于当前安装的信息。 (继承自 Installer) |
DesignMode |
获取一个值,用以指示 Component 当前是否处于设计模式。 (继承自 Component) |
Events |
获取附加到此 Component 的事件处理程序的列表。 (继承自 Component) |
HelpText |
获取为服务安装选项显示的帮助文本。 |
Installers |
获取该安装程序包含的安装程序的集合。 (继承自 Installer) |
Parent |
获取或设置包含该安装程序所属的集合的安装程序。 (继承自 Installer) |
Password |
获取或设置与运行服务应用程序时所使用用户帐户关联的密码。 |
Site | (继承自 Component) |
Username |
获取或设置运行服务应用程序时将使用的用户帐户。 |
方法
事件
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) |