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 Service 1」 和 「Hello-World Service 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)

建立包含所有相關資訊的物件,這些資訊是產生用來與遠端物件通訊的所需 Proxy。

(繼承來源 MarshalByRefObject)
Dispose()

釋放 Component 所使用的所有資源。

(繼承來源 Component)
Dispose(Boolean)

釋放 Component 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。

(繼承來源 Component)
Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetLifetimeService()
已淘汰.

擷取控制這個執行個體存留期 (Lifetime) 原則的目前存留期服務物件。

(繼承來源 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)

適用於

另請參閱