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:
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.
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;
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
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);
}
}
}
Dua masalah khas:
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.
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)
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