Menginstal Windows Service yang dibuat di Visual Studio

Ketika saya membuat Windows Layanan baru di Visual Studio 2010, saya mendapatkan pesan yang menyatakan untuk menggunakan InstallUtil dan net start untuk menjalankan layanan.

Saya telah mencoba langkah-langkah berikut:

  1. Membuat project baru File -> New> Proyek -> Layanan Windows
  2. Nama Proyek: TestService
  3. Membangun proyek seperti (Service1 konstruktor, OnStart, OnStop)
  4. Buka command prompt, jalankan "C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" TestService.exe
  5. Run net start TestService.

Output dari langkah 4

Menjalankan ditransaksikan instalasi.

Awal Instalasi tahap instalasi.

Melihat isi dari file log untuk C:\Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestService\obj\x86\Debug\TestService.exe perakitan's kemajuan.

file ini terletak di C:\Users\myusername\Documents\Visual Studio 2010\Projects\Tes tlayanan\TestService\t\x86\Debug\TestService.InstallLog.

Instalasi perakitan 'C:\Users\myusername\Documents\Visual Studio 2010\Projects\Tes ervice\TestService\t\x86\Debug\TestService.exe'.

parameter yang Terkena dampak adalah:

logtoconsole =

logfile = C:\Users\myusername\Documents\Visual Studio 2010\Projects\TestService\T estService\t\x86\Debug\TestService.InstallLog

assemblypath = C:\Users\myusername\Documents\Visual Studio 2010\Projects\TestServ ice\TestService\obj\x86\Debug\TestService.exe

Tidak umum installer dengan RunInstallerAttribute.Ya atribut dapat ditemukan dalam C:\Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestSe rvice\obj\x86\Debug\TestService.exe perakitan.

fase pemasangan selesai dengan sukses, dan Melakukan fase awal.

Melihat isi dari file log untuk C:\Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestService\obj\x86\Debug\TestService.exe perakitan's kemajuan.

file ini terletak di C:\Users\myusername\Documents\Visual Studio 2010\Projects\Tes tlayanan\TestService\t\x86\Debug\TestService.InstallLog.

Melakukan perakitan 'C:\Users\myusername\Documents\Visual Studio 2010\Projects\Tes ervice\TestService\t\x86\Debug\TestService.exe'.

parameter yang Terkena dampak adalah:

logtoconsole =

logfile = C:\Users\myusername\Documents\Visual Studio 2010\Projects\TestService\T estService\t\x86\Debug\TestService.InstallLog

assemblypath = C:\Users\myusername\Documents\Visual Studio 2010\Projects\TestServ ice\TestService\obj\x86\Debug\TestService.exe

Tidak umum installer dengan RunInstallerAttribute.Ya atribut dapat ditemukan dalam C:\Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestSe rvice\obj\x86\Debug\TestService.exe perakitan.

Hapus InstallState file karena tidak ada installer.

Melakukan tahap selesai dengan sukses.

ditransaksikan pemasangan telah selesai.

Output dari langkah 5

Nama layanan adalah tidak valid.

Bantuan lebih lanjut tersedia dengan mengetik NET HELPMSG 2185.

Larutan

Anda perlu untuk membuka Layanan.cs file di designer, klik kanan dan pilih menu-option "Tambahkan Installer".

Itu tidak't menginstal langsung dari kotak... yang anda butuhkan untuk membuat installer kelas pertama.

Beberapa referensi di layanan installer:

Cara untuk: Tambahkan Installer untuk Aplikasi Layanan

Cukup lama... tapi ini adalah apa yang saya bicarakan:

Layanan Windows di C#: Menambahkan Installer (bagian 3)

Dengan melakukan ini, ProjectInstaller.cs akan otomatis dibuat. Kemudian anda dapat klik dua kali ini, masukkan desainer, dan mengkonfigurasi komponen:

  • serviceInstaller1 mempunyai sifat-sifat dari jasa itu sendiri: Keterangan, DisplayName, ServiceName dan StartType adalah yang paling penting.

  • serviceProcessInstaller1 ini penting properti: Akun yang merupakan akun di mana layanan akan berjalan.

Misalnya:

this.serviceProcessInstaller1.Account = ServiceAccount.LocalSystem;
Komentar (5)

Sedang melihat:

Tidak umum installer dengan RunInstallerAttribute.Ya atribut dapat ditemukan di C:\Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestSe rvice\obj\x86\Debug\TestService.exe perakitan.

Sepertinya anda mungkin tidak memiliki installer kelas dalam kode anda. Ini adalah kelas yang mewarisi dari Installer yang akan memberitahu installutil bagaimana untuk menginstal anda yang dapat dijalankan sebagai layanan.

P. s. Aku punya saya sendiri sedikit self-menginstal/debuggable Layanan Windows template di sini yang dapat anda copy kode atau gunakan: Debuggable, Self-Menginstal Windows Service

Komentar (2)

Berikut ini adalah cara alternatif untuk membuat installer dan menyingkirkan kesalahan yang pesan. Juga tampaknya bahwa VS2015 express tidak memiliki "Tambahkan Installer" item menu.

Anda hanya perlu membuat kelas dan tambahkan kode di bawah ini dan tambahkan referensi System.Configuration.Install.dll.

using System.Configuration.Install;
using System.ServiceProcess;
using System.ComponentModel;

namespace SAS
{
    [RunInstaller(true)]
    public class MyProjectInstaller : Installer
    {
        private ServiceInstaller serviceInstaller1;
        private ServiceProcessInstaller processInstaller;

        public MyProjectInstaller()
        {
            // Instantiate installer for process and service.
            processInstaller = new ServiceProcessInstaller();
            serviceInstaller1 = new ServiceInstaller();

            // The service runs under the system account.
            processInstaller.Account = ServiceAccount.LocalSystem;

            // The service is started manually.
            serviceInstaller1.StartType = ServiceStartMode.Manual;

            // ServiceName must equal those on ServiceBase derived classes.
            serviceInstaller1.ServiceName = "SAS Service";

            // Add installer to collection. Order is not important if more than one service.
            Installers.Add(serviceInstaller1);
            Installers.Add(processInstaller);
        }
    }
}
Komentar (1)

Dua masalah khas:

  1. Hilang ProjectInstaller kelas (seperti @MiguelAngelo telah menunjuk)
  2. The command prompt harus "Run as Administrator"
Komentar (0)

Masalah lain yang mungkin (yang saya berlari ke):

Pastikan bahwa ProjectInstaller kelas publik. Sejujurnya, saya tidak yakin bagaimana saya melakukannya, tapi saya menambahkan event handler untuk ProjectInstaller.Desainer.cs, seperti:

ini.serviceProcessInstaller1.BeforeInstall += Sistem baru.Konfigurasi.Menginstal.InstallEventHandler(ini.serviceProcessInstaller1_BeforeInstall);

Saya kira selama otomatis proses menciptakan fungsi pengendali di ProjectInstaller.cs itu mengubah definisi kelas dari

public class ProjectInstaller : Sistem.Konfigurasi.Menginstal.Installer

untuk

parsial kelas ProjectInstaller : Sistem.Konfigurasi.Menginstal.Installer

mengganti publik dengan kata kunci parsial. Jadi, dalam rangka untuk memperbaiki hal itu harus

public partial class ProjectInstaller : Sistem.Konfigurasi.Menginstal.Installer

Saya menggunakan Visual Studio 2013 Community edition.

Komentar (2)

Stealth Perubahan di VS 2010 dan .NET 4.0 dan yang lebih baru

Tidak semua installer dengan RunInstallerAttribute.Ya atribut dapat ditemukan

Ada alias perubahan atau compiler pembersihan di .BERSIH yang dapat mengungkapkan ini sedikit tweak untuk kasus spesifik anda.

Jika anda memiliki kode berikut ...

RunInstaller(true)   // old alias  

Anda mungkin perlu untuk meng-update untuk

RunInstallerAttribute(true)  // new property spelling

Hal ini seperti sebuah alias berubah di bawah selimut pada waktu kompilasi atau pada saat runtime dan anda akan mendapatkan error ini perilaku. Di atas eksplisit perubahan untuk RunInstallerAttribute(benar) tetap dalam semua dari kita menginstal skenario pada semua mesin.

Setelah anda menambahkan proyek atau layanan installer kemudian memeriksa untuk "tua" RunInstaller(benar) dan perubahan itu baru RunInstallerAttribute(benar)

Komentar (1)

Namun lain menangkap aku berlari ke: memastikan Installer kelas turunan (biasanya ProjectInstaller) adalah di bagian atas namespace hirarki, saya mencoba untuk menggunakan semua kelas dalam satu kelas yang umum, namun hasil ini di tempat yang sama error:

Tidak semua installer dengan RunInstallerAttribute.Ya atribut dapat ditemukan

Komentar (0)