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 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 的專案安裝程式類別,並將 類別上的 設定 RunInstallerAttribute 為 true
。 在您的專案中,針對每個服務應用程式具現化一個 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) |