ServiceInstaller Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menginstal kelas yang diperluas ServiceBase untuk mengimplementasikan layanan. Kelas ini dipanggil oleh utilitas penginstalan saat menginstal aplikasi layanan.
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
- Warisan
Contoh
Contoh berikut membuat penginstal proyek, yang disebut MyProjectInstaller
, yang mewarisi dari Installer. Diasumsikan ada layanan yang dapat dieksekusi yang berisi dua layanan, "Hello-World Service 1" dan "Hello-World Service 2". Dalam konstruktor untuk MyProjectInstaller
(yang akan dipanggil oleh utilitas penginstalan), ServiceInstaller objek dibuat untuk masing-masing layanan ini, dan ServiceProcessInstaller dibuat untuk yang dapat dieksekusi. Agar utilitas penginstalan dikenali MyProjectInstaller
sebagai alat penginstal yang valid, RunInstallerAttribute atribut diatur ke true
.
Properti opsional diatur pada penginstal proses dan penginstal layanan sebelum penginstal ditambahkan ke Installers koleksi. Ketika utilitas penginstalan mengakses MyProjectInstaller
, objek yang ditambahkan ke Installers koleksi melalui panggilan ke InstallerCollection.Add akan diinstal secara bergantian. Selama proses, alat penginstal mempertahankan informasi status yang menunjukkan objek mana yang telah diinstal, sehingga masing-masing dapat dicadangkan pada gilirannya, jika kegagalan penginstalan terjadi.
Biasanya, Anda tidak akan membuat instans kelas alat penginstal proyek Anda secara eksplisit. Anda akan membuatnya dan menambahkan RunInstallerAttribute atribut ke sintaks, tetapi itu adalah utilitas penginstalan yang benar-benar memanggil, dan karenanya membuat instans, kelas .
#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
Keterangan
ServiceInstaller memang bekerja khusus untuk layanan yang terkait dengannya. Ini digunakan oleh utilitas penginstalan untuk menulis nilai registri yang terkait dengan layanan ke subkuntang dalam kunci registri HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Layanan ini diidentifikasi oleh ServiceName-nya dalam subkuntangan ini. Subkunjud juga menyertakan nama executable atau .dll tempat layanan berada.
Untuk menginstal layanan, buat kelas penginstal proyek yang mewarisi dari Installer kelas , dan atur RunInstallerAttribute atribut pada kelas ke true
. Dalam proyek Anda, buat satu ServiceProcessInstaller instans per aplikasi layanan, dan satu ServiceInstaller instans untuk setiap layanan dalam aplikasi. Dalam konstruktor kelas penginstal proyek Anda, atur properti penginstalan untuk layanan menggunakan ServiceProcessInstaller instans dan ServiceInstaller , dan tambahkan instans ke Installers koleksi.
Catatan
Disarankan agar Anda menggunakan konstruktor untuk menambahkan instans alat penginstal; namun, jika Anda perlu menambahkan ke Installers koleksi dalam Install metode , pastikan untuk melakukan penambahan yang sama ke koleksi dalam Uninstall metode .
Untuk semua kelas yang berasal dari Installer kelas , status Installers koleksi harus sama dalam Install metode dan Uninstall . Namun, Anda dapat menghindari pemeliharaan koleksi di seluruh Install metode dan Uninstall jika Anda menambahkan instans alat penginstal ke Installers koleksi di konstruktor kelas penginstal kustom Anda. Ketika utilitas penginstalan dipanggil, ia mencari RunInstallerAttribute atribut . Jika atributnya adalah true
, utilitas menginstal semua layanan yang ditambahkan ke Installers koleksi yang terkait dengan penginstal proyek Anda. Jika RunInstallerAttribute adalah false
atau tidak ada, utilitas penginstalan mengabaikan alat penginstal proyek.
Yang ServiceProcessInstaller terkait dengan kelas penginstalan proyek Anda menginstal informasi yang umum untuk semua ServiceInstaller instans dalam proyek. Jika layanan ini memiliki apa pun yang memisahkannya dari layanan lain dalam proyek penginstalan, informasi khusus layanan tersebut diinstal oleh metode ini.
Catatan
Sangat penting bahwa ServiceName identik ServiceBase.ServiceName dengan kelas yang Anda turunkan dari ServiceBase. Biasanya, nilai ServiceBase.ServiceName properti untuk layanan diatur dalam fungsi Main() dari aplikasi layanan yang dapat dieksekusi. Manajer Kontrol Layanan menggunakan ServiceInstaller.ServiceName properti untuk menemukan layanan dalam executable ini.
Anda dapat mengubah properti lain pada ServiceInstaller sebelum atau sesudah menambahkannya ke Installers koleksi alat penginstal proyek Anda. Misalnya, layanan StartType dapat diatur untuk memulai layanan secara otomatis saat reboot atau mengharuskan pengguna untuk memulai layanan secara manual.
Biasanya, Anda tidak akan memanggil metode pada dalam kode Anda; metode umumnya hanya dipanggil ServiceInstaller oleh utilitas penginstalan. Utilitas penginstalan secara otomatis memanggil ServiceProcessInstaller.Install metode dan ServiceInstaller.Install selama proses penginstalan. Ini mendukung kegagalan, jika perlu, dengan memanggil Rollback (atau ServiceInstaller.Rollback) pada semua komponen yang diinstal sebelumnya.
Utilitas penginstalan memanggil Uninstall untuk menghapus objek.
Rutinitas penginstalan aplikasi mempertahankan informasi secara otomatis tentang komponen yang sudah diinstal, menggunakan alat penginstal Installer.Contextproyek. Informasi status ini terus diperbarui sebagai ServiceProcessInstaller instans, dan setiap ServiceInstaller instans diinstal oleh utilitas. Biasanya tidak perlu bagi kode Anda untuk memodifikasi informasi status secara eksplisit.
Ketika penginstalan dilakukan, penginstalan secara otomatis membuat EventLogInstaller untuk menginstal sumber log peristiwa yang terkait dengan ServiceBase kelas turunan. Properti Log untuk sumber ini diatur oleh ServiceInstaller konstruktor ke log Aplikasi komputer. Ketika Anda mengatur ServiceName dari ServiceInstaller (yang harus identik ServiceBase.ServiceName dengan layanan), Source secara otomatis diatur ke nilai yang sama. Dalam kegagalan penginstalan, penginstalan sumber digulung balik bersama dengan layanan yang diinstal sebelumnya.
Metode mencoba Uninstall menghentikan layanan jika sedang berjalan. Apakah ini berhasil atau tidak, Uninstall urungkan perubahan yang dibuat oleh Install. Jika sumber baru dibuat untuk pengelogan peristiwa, sumber akan dihapus.
Konstruktor
ServiceInstaller() |
Menginisialisasi instans baru kelas ServiceInstaller. |
Properti
CanRaiseEvents |
Mendapatkan nilai yang menunjukkan apakah komponen dapat menaikkan peristiwa. (Diperoleh dari Component) |
Container |
IContainer Mendapatkan yang berisi Component. (Diperoleh dari Component) |
Context |
Mendapatkan atau mengatur informasi tentang penginstalan saat ini. (Diperoleh dari Installer) |
DelayedAutoStart |
Mendapatkan atau menetapkan nilai yang menunjukkan apakah layanan harus ditunda dari memulai hingga layanan lain yang dimulai secara otomatis berjalan. |
Description |
Mendapatkan atau mengatur deskripsi untuk layanan. |
DesignMode |
Mendapatkan nilai yang menunjukkan apakah Component saat ini dalam mode desain. (Diperoleh dari Component) |
DisplayName |
Menunjukkan nama yang mudah diingat yang mengidentifikasi layanan kepada pengguna. |
Events |
Mendapatkan daftar penanganan aktivitas yang dilampirkan ke ini Component. (Diperoleh dari Component) |
HelpText |
Mendapatkan teks bantuan untuk semua penginstal dalam koleksi alat penginstal. (Diperoleh dari Installer) |
Installers |
Mendapatkan kumpulan alat penginstal yang dikandung alat penginstal ini. (Diperoleh dari Installer) |
Parent |
Mendapatkan atau mengatur alat penginstal yang berisi koleksi tempat alat penginstal ini berada. (Diperoleh dari Installer) |
ServiceName |
Menunjukkan nama yang digunakan oleh sistem untuk mengidentifikasi layanan ini. Properti ini harus identik ServiceName dengan layanan yang ingin Anda instal. |
ServicesDependedOn |
Menunjukkan layanan yang harus berjalan agar layanan ini berjalan. |
Site |
Mendapatkan atau mengatur ISite dari Component. (Diperoleh dari Component) |
StartType |
Menunjukkan bagaimana dan kapan layanan ini dimulai. |
Metode
Commit(IDictionary) |
Ketika ditimpa di kelas turunan, menyelesaikan transaksi penginstalan. (Diperoleh dari Installer) |
CopyFromComponent(IComponent) |
Menyalin properti dari instans ServiceBase ke alat penginstal ini. |
CreateObjRef(Type) |
Membuat objek yang berisi semua informasi relevan yang diperlukan untuk menghasilkan proksi yang digunakan untuk berkomunikasi dengan objek jarak jauh. (Diperoleh dari MarshalByRefObject) |
Dispose() |
Merilis semua sumber daya yang Componentdigunakan oleh . (Diperoleh dari Component) |
Dispose(Boolean) |
Merilis sumber daya tidak terkelola yang digunakan oleh Component dan secara opsional merilis sumber daya terkelola. (Diperoleh dari Component) |
Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini. (Diperoleh dari Object) |
GetHashCode() |
Berfungsi sebagai fungsi hash default. (Diperoleh dari Object) |
GetLifetimeService() |
Kedaluwarsa.
Mengambil objek layanan seumur hidup saat ini yang mengontrol kebijakan seumur hidup untuk instans ini. (Diperoleh dari MarshalByRefObject) |
GetService(Type) |
Mengembalikan objek yang mewakili layanan yang disediakan oleh Component atau oleh Container. (Diperoleh dari Component) |
GetType() |
Mendapatkan dari instans Type saat ini. (Diperoleh dari Object) |
InitializeLifetimeService() |
Kedaluwarsa.
Mendapatkan objek layanan seumur hidup untuk mengontrol kebijakan seumur hidup untuk instans ini. (Diperoleh dari MarshalByRefObject) |
Install(IDictionary) |
Menginstal layanan dengan menulis informasi aplikasi layanan ke registri. Metode ini dimaksudkan untuk digunakan oleh alat penginstalan, yang memproses metode yang sesuai secara otomatis. |
IsEquivalentInstaller(ComponentInstaller) |
Menunjukkan apakah dua penginstal akan menginstal layanan yang sama. |
MemberwiseClone() |
Membuat salinan dangkal dari saat ini Object. (Diperoleh dari Object) |
MemberwiseClone(Boolean) |
Membuat salinan dangkal objek saat ini MarshalByRefObject . (Diperoleh dari MarshalByRefObject) |
OnAfterInstall(IDictionary) |
Memunculkan kejadian AfterInstall. (Diperoleh dari Installer) |
OnAfterRollback(IDictionary) |
Memunculkan kejadian AfterRollback. (Diperoleh dari Installer) |
OnAfterUninstall(IDictionary) |
Memunculkan kejadian AfterUninstall. (Diperoleh dari Installer) |
OnBeforeInstall(IDictionary) |
Memunculkan kejadian BeforeInstall. (Diperoleh dari Installer) |
OnBeforeRollback(IDictionary) |
Memunculkan kejadian BeforeRollback. (Diperoleh dari Installer) |
OnBeforeUninstall(IDictionary) |
Memunculkan kejadian BeforeUninstall. (Diperoleh dari Installer) |
OnCommitted(IDictionary) |
Memunculkan kejadian Committed. (Diperoleh dari Installer) |
OnCommitting(IDictionary) |
Memunculkan kejadian Committing. (Diperoleh dari Installer) |
Rollback(IDictionary) |
Mengembalikan informasi aplikasi layanan yang ditulis ke registri oleh prosedur penginstalan. Metode ini dimaksudkan untuk digunakan oleh alat penginstalan, yang memproses metode yang sesuai secara otomatis. |
ToString() |
Mengembalikan yang String berisi nama Component, jika ada. Metode ini tidak boleh ditimpa. (Diperoleh dari Component) |
Uninstall(IDictionary) |
Menghapus instalan layanan dengan menghapus informasi tentang layanan tersebut dari registri. |
Acara
AfterInstall |
Terjadi setelah Install(IDictionary) metode semua penginstal di Installers properti telah berjalan. (Diperoleh dari Installer) |
AfterRollback |
Terjadi setelah penginstalan semua penginstal di Installers properti digulung balik. (Diperoleh dari Installer) |
AfterUninstall |
Terjadi setelah semua penginstal di Installers properti melakukan operasi penghapusan instalasi mereka. (Diperoleh dari Installer) |
BeforeInstall |
Terjadi sebelum Install(IDictionary) metode setiap alat penginstal dalam koleksi alat penginstal telah berjalan. (Diperoleh dari Installer) |
BeforeRollback |
Terjadi sebelum alat penginstal di Installers properti digulung balik. (Diperoleh dari Installer) |
BeforeUninstall |
Terjadi sebelum alat penginstal di Installers properti melakukan operasi penghapusan instalasinya. (Diperoleh dari Installer) |
Committed |
Terjadi setelah semua penginstal di Installers properti telah melakukan penginstalan mereka. (Diperoleh dari Installer) |
Committing |
Terjadi sebelum penginstal di Installers properti melakukan penginstalan mereka. (Diperoleh dari Installer) |
Disposed |
Terjadi ketika komponen dibuang oleh panggilan ke Dispose() metode . (Diperoleh dari Component) |