Visual Studio'da oluşturulan Windows Hizmeti'ni yükleme


136

Visual Studio 2010'da yeni bir Windows hizmeti oluşturduğumda, hizmeti çalıştırmak için InstallUtil ve net start'ı belirten bir ileti alıyorum.

Aşağıdaki adımları denedim:

  1. Yeni proje oluştur Dosya -> Yeni -> Proje -> Windows Hizmeti
  2. Proje Adı: TestService
  3. Projeyi olduğu gibi derleyin (Service1 yapıcısı, OnStart, OnStop)
  4. Komut istemini açın, "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil.exe" TestService.exe dosyasını çalıştırın
  5. Net start TestService'i çalıştırın .

4. adımın çıktısı

İşlem yapılan bir yüklemeyi çalıştırma.

Kurulumun Kurulum aşamasına başlama.

C: \ Users \ kullanıcı adı \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.exe derlemesinin ilerlemesi için günlük dosyasının içeriğine bakın.

Dosya C: \ Kullanıcılar \ kullanıcı adı \ Belgeler \ Visual Studio 2010 \ Projects \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog konumunda bulunur.

'C: \ Kullanıcılar \ kullanıcı adı \ Belgeler \ Visual Studio 2010 \ Projects \ TestS ervice \ TestService \ obj \ x86 \ Debug \ TestService.exe' derlemesini yükleme.

Etkilenen parametreler:

logtoconsole =

logfile = C: \ Kullanıcılar \ kullanıcı adı \ Belgeler \ Visual Studio 2010 \ Projects \ TestService \ T estService \ obj \ x86 \ Debug \ TestService.InstallLog

assemblypath = C: \ Kullanıcılar \ kullanıcı adı \ Belgeler \ Visual Studio 2010 \ Projects \ TestServ ice \ TestService \ obj \ x86 \ Debug \ TestService.exe

RunInstallerAttribute.Yes özniteliğine sahip hiçbir ortak yükleyici C: \ Kullanıcılar \ kullanıcı adı \ Belgeler \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe derlemesinde bulunamadı.

Yükleme aşaması başarıyla tamamlandı ve İşleme aşaması başlıyor.

C: \ Users \ kullanıcı adı \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.exe derlemesinin ilerlemesi için günlük dosyasının içeriğine bakın.

Dosya C: \ Kullanıcılar \ kullanıcı adı \ Belgeler \ Visual Studio 2010 \ Projects \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog konumunda bulunur.

'C: \ Kullanıcılar \ kullanıcı adı \ Belgeler \ Visual Studio 2010 \ Projects \ TestS ervice \ TestService \ obj \ x86 \ Debug \ TestService.exe' derleme işleminin yapılması.

Etkilenen parametreler:

logtoconsole =

logfile = C: \ Kullanıcılar \ kullanıcı adı \ Belgeler \ Visual Studio 2010 \ Projects \ TestService \ T estService \ obj \ x86 \ Debug \ TestService.InstallLog

assemblypath = C: \ Kullanıcılar \ kullanıcı adı \ Belgeler \ Visual Studio 2010 \ Projects \ TestServ ice \ TestService \ obj \ x86 \ Debug \ TestService.exe

RunInstallerAttribute.Yes özniteliğine sahip hiçbir ortak yükleyici C: \ Kullanıcılar \ kullanıcı adı \ Belgeler \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe derlemesinde bulunamadı.

Yükleyici olmadığı için InstallState dosyasını kaldırın.

Tamamlama aşaması başarıyla tamamlandı.

İşlem yapılan yükleme tamamlandı.

5. adımın çıktısı

Hizmet adı geçersiz.

NET HELPMSG 2185 yazarak daha fazla yardım alabilirsiniz.

Yanıtlar:


243

Service.cs dosyasını tasarımcıda açmanız, sağ tıklamanız ve "Installer Ekle" menü seçeneğini seçmeniz gerekir.

Kutudan çıktığı anda kurulmayacaktır ... önce kurulum sınıfını oluşturmanız gerekir.

Servis yükleyici hakkında bazı referanslar:

Nasıl yapılır: Hizmet Uygulamanıza Yükleyici Ekleme

Oldukça eski ... ama bundan bahsediyorum:

C # 'ta Windows Hizmetleri: Yükleyiciyi Ekleme (bölüm 3)

Bunu yaparak, ProjectInstaller.csotomatik olarak bir oluşturulur. Ardından bunu çift tıklayabilir, tasarımcıya girebilir ve bileşenleri yapılandırabilirsiniz:

  • serviceInstaller1hizmetin kendisi özelliklere sahiptir: Description, DisplayName, ServiceNameve StartTypeçok önemlidir.

  • serviceProcessInstaller1şu önemli özelliğe sahiptir: Accounthizmetin çalışacağı hesaptır.

Örneğin:

this.serviceProcessInstaller1.Account = ServiceAccount.LocalSystem;

3
Yükleyiciyi eklemek ve hesabı LocalSystem olarak ayarlamak bunu yaptı. Teşekkürler!
Luc

1
Aynı hatayı VS2013'te alıyorum. Sağladığınız bağlantıları kontrol ettim, [Process] Installer1 bileşen hizmeti de dahil olmak üzere ProjectInstaller'ın doğru yapılandırıldığını doğruladım. İnstallutil.exe dosyasını Yönetici olarak çalıştırıyorum. Yine de "RunInstallerAttribute.Yes özniteliğine sahip hiçbir ortak yükleyici bulunamadı" bildiriyor. Herhangi bir fikir?
Barry Dysert

4
Lol. Ben "Oldukça eski" bağlantı Arcane Code adlı bir site olduğunu seviyorum. Bu sayfa büyüdükçe, ad daha doğru olur :-)
HotN

"Tasarımcı" nedir? Kullanıcı arayüzü olmayan uygulamalar genellikle tasarımcı olarak adlandırılacak hiçbir şey içermez.
Maxx

Hizmetlerde de formlar gibi bir tasarımcı var
Grungondola

11

Bakmak:

RunInstallerAttribute.Yes özniteliğine sahip hiçbir ortak yükleyici C: \ Kullanıcılar \ kullanıcı adı \ Belgeler \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe derlemesinde bulunamadı.

Kodunuzda bir yükleyici sınıfınız olmayabilir. Bu, devralınan bir sınıftır ve çalıştırılabilir dosyayı bir hizmet olarak nasıl Installerkuracağınızı söyler installutil.

Ps Burada kod kopyalayabilir veya kullanabilirsiniz kendi küçük kendi kendine yükleme / hata ayıklama Windows Hizmeti şablonu var: Hata ayıklama, Kendi kendine Yükleme Windows Hizmeti


Visual Studio -> Özellikler -> Hizmetler'de TestService projesine sağ tıkladığımda, sayfa devre dışı bırakılıyor ... farklı bir konuma mı başvuruyordunuz? Uygulama altında, Derleme adı TestService'dir.
jkh

@John: Hizmet konsolu ile ilgili ilk kısmı yok sayın, Aslında ile başlayan ikinci kısma bakın . Bir yükleyici bulamadığı için hizmetin hiç yüklenmediği anlaşılıyor.
James Michael Hare

8

Yükleyiciyi oluşturmanın ve bu hata mesajından kurtulmanın alternatif bir yolu. Ayrıca VS2015 express'in "Installer Ekle" menü öğesine sahip olmadığı anlaşılıyor.

Bir sınıf oluşturmanız ve aşağıdaki kodu eklemeniz ve System.Configuration.Install.dll referansını eklemeniz yeterlidir.

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);
        }
    }
}

VS2015 de çalışan ve bu çözüm beni daha önce alıyorum "RunInstallerAttribute.Yes ile ortak yükleyici yok" hata iletisini geçmiş var. Teşekkür ederim!
PHBeagle

6

İki tipik sorun:

  1. ProjectInstaller sınıfını eksik (@MiguelAngelo'nun işaret ettiği gibi)
  2. Komut istemi zorunluluk “olarak çalıştır Yönetici

4

Başka bir olası sorun (ki ben karşılaştım):

ProjectInstallerSınıfın olduğundan emin olun public. Dürüst olmak gerekirse, tam olarak nasıl yaptığımdan emin değilim, ancak olay işleyicilerini ekledim ProjectInstaller.Designer.cs, örneğin:

this.serviceProcessInstaller1.BeforeInstall += new System.Configuration.Install.InstallEventHandler(this.serviceProcessInstaller1_BeforeInstall);

İçerisinde işleyici işlevini oluşturma işlemi sırasında otomatik olarak ProjectInstaller.cssınıf tanımını değiştirdi.

public class ProjectInstaller : System.Configuration.Install.Installer

için

partial class ProjectInstaller : System.Configuration.Install.Installer

değiştirilmesipublic ile anahtar kelimeyi partial. Yani, düzeltmek için

public partial class ProjectInstaller : System.Configuration.Install.Installer

Visual Studio 2013 Topluluk sürümünü kullanıyorum.


Bunun 3 yıl sonra olduğunu biliyorum, ama bu benim sorunumu çözdü. Tasarımcı neden önceki ya da bir önceki kısmi sınıfı iç kısmi sınıfa değiştirdiğinden emin değil. Teşekkür ederim!
trashrobber

2

VS 2010 ve .NET 4.0 ve Üstünde Gizli Değişiklik

RunInstallerAttribute.Yes özniteliğine sahip hiçbir genel yükleyici bulunamadı

.NET'te özel durumunuz için bu küçük değişikliği ortaya çıkarabilecek bir takma ad değişikliği veya derleyici temizliği vardır.

Aşağıdaki kodunuz varsa…

RunInstaller(true)   // old alias  

Güncellemeniz gerekebilir

RunInstallerAttribute(true)  // new property spelling

Bu, derleme zamanında veya çalışma zamanında kapakların altında değiştirilen bir diğer addır ve bu hata davranışını alırsınız. Yukarıdaki RunInstallerAttribute (true) 'da yapılan açık değişiklik, tüm makinelerdeki tüm kurulum senaryolarımızda düzeltildi.

Proje veya hizmet yükleyicisi ekledikten sonra “old” RunInstaller (true) öğesini kontrol edin ve yeni RunInstallerAttribute (true) olarak değiştirin


Bildiğim kadarıyla "Attribute" postfix'i atlayabilirsiniz, yani [RunInstaller (true)] ve [RunInstallerAttribute (true)] aynıdır. Farklı bir öznitelikle deneyin, örneğin [DebuggerStepThrough ()] ve [DebuggerStepThroughAttribute ()] - her ikisi de bir sınıfa uygulandığında çalışır.
Matt

1

Ben içine koştu başka bir catch: Installer türetilmiş sınıf (genellikle ProjectInstaller) ad alanı hiyerarşisinin en üstünde olduğundan emin olun , ben başka bir ortak sınıf içinde bir ortak sınıf kullanmaya çalıştım, ama bu aynı eski hatayla sonuçlanır:

RunInstallerAttribute.Yes özniteliğine sahip hiçbir genel yükleyici bulunamadı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.