Bir Windows hizmetini kurmak için nasıl bir InstallShield LE projesi oluşturabilirim?


104

Visual Studio 2012'yi dün MSDN'de yayınlandığında indirdim. 2010'da sahip olduğumuz proje türlerinden birkaçının gittiğini veya farklı olduğunu fark ettim. Şu anda benim için en büyük fark, Windows Installer projesinin kaldırılması. Şimdi InstallShield LE (Sınırlı Sürüm) kullanmaya zorlanıyoruz. Buradaki sorun, bir ton Windows Hizmeti yazmam ve InstallShield LE'yi nasıl kuracağımı göremem. Görünüşe göre biz (şirketim) profesyonel sürüm için lisanslara yatırım yapmamız gerekecek.

InstallShield LE'de hizmet kurmanın bir yolunu bulan var mı? Windows Installer projesini kullanırken, sadece özel eylemleri ayarlarsınız.


1
Visual Studio Dağıtım projelerinde InstallUtil özel eylemlerini kullanmak gerçekten kötü bir uygulamaydı. Temelde kırılgan bir çözümle tekerleği yeniden icat ediyor çünkü temelde yatan geliştirme aracı MSI'ın yerel yeteneklerini açığa çıkarmadı.
Christopher Painter

Yanıtlar:


161

Visual Studio 2012 ve InstallShield LE için aşağıdakileri yapın:

  • InstallShield proje asistanını çalıştırın ve hizmetinizin birincil çıktısını Uygulama dosyaları bölümüne ekleyin.
  • Proje asistanını tamamladıktan sonra, kurulum projesinin ikinci adımındaki "Dosyalar" öğesine çift tıklayın.

Dosyalar bölümü

  • Servisinizin birincil çıktısına sağ tıklayın ve özelliklere gidin.
  • "COM ve .NET Ayarları" sekmesini tıklayın ve "Yükleyici Sınıfı" onay kutusunu işaretleyin. görüntü açıklamasını buraya girin
  • Tamam'ı tıklayın

Şimdi, yüklemenizi oluşturup çalıştırdığınızda, hizmetiniz Windows Hizmetleri ek bileşeninde görünecektir.

Bunun, hizmet projenize bir "Proje Yükleyicisi" eklediğinizi varsaydığına dikkat edin (Hizmet tasarım sayfasına sağ tıklayın ve "yükleyici ekle" ye tıklayın). Bu çalışmayı Windows 8'de Visual Studio 2012 / InstallShield LE ile onaylayabilirim.


Tamam, bu aynı zamanda VS 2010 ve Win 7 Pro'da da çalışır. Henüz VS 2012'de denemedim, ancak bunu yapmalı. Teşekkürler.
fizch

3
Kullanıcıdan veritabanı bağlantı dizesini (Sunucu, kimlik doğrulama ve veritabanı adı) isteyen bir iletişim kutusuna sahip olmak ve InstallShield LE kullanarak Windows hizmeti yapılandırma dosyasını güncellemek mümkün müdür?
Adelia Benalius

2
Bu oldukça iyi bir rehber: c-sharpcorner.com/uploadfile/cb88b2/… .
Jonty


1
Bu seçenek, kurulumdan sonra hizmeti başlatmaz. Hizmeti kurmak ve başlatmak için çözüm gezgininde 3. Hedef Sistemi Yapılandır> Hizmetler'i seçin .
Rajeev

24

Yakın zamanda VS 2012'yi Install Shield LE ile kurdum. İlk başta, bir derlemeden sonra bir ISEXP -5036 dahili sunucu hatası almaya devam ettim (bu, bir ISLE projesi kurduktan ve Install Shield Project Assistant aracılığıyla çalıştırıldıktan sonraydı). Sonunda, başarısız olduğu DVD-5 ortam türünde MSI oluşturmaya çalıştığını öğrendim. Bazı nedenlerden dolayı, çözümü sıfırdan yeniden yaratmak, bir şekilde yalnızca çalışan CD_ROM ve SingleImage ortam türlerine inşa etmeyi tanır.

Her neyse, 5036 hatasını düzeltmek için, VS 2012'de (üst menü) Build sekmesine tıklayın, konfigürasyon yöneticisini seçin ve DVD-5 konfigürasyonunda IS kurulum dosyanızın seçili olduğunu görmelisiniz. Bunu CD_ROM olarak değiştirin ve kapat'a tıklayın. Oluşturduğunuz / yeniden oluşturduğunuzda, IS 5036 hatası olmadan tamamlanacaktır.

görüntü açıklamasını buraya girin


2
Bunun onun sorunuyla bir ilgisi olmayabilir, ama benimkini çözdü. Teşekkür ederim! +1
David

Başlangıçta benim için aynı sorun, varsayılan kurulumda yapılandırma olarak DVD-5 vardı ve kurulum başarısız oldu. İpucunuzla bunu Tek Görüntü olarak değiştirdim ve sorunsuz bir şekilde oluşturdum!
Nick Bork

DVD-5 seçildi. Basit ama harika cevap
beaumondo

6

Yükleyici sınıfı onay kutusunu kullanmak bazı örnekler için işe yarayabilir, aşağıdaki hatayla karşılaşabilirsiniz:

Hata 1001. Belirtilen hizmet zaten var

İşte bu bağlantıdan bu sorunun nasıl çözüleceğine dair bir alıntı :

Hata için: Hata 1001. Belirtilen hizmet zaten var

Bu hata, bir .NET Hizmeti yükleyen bileşen ".NET Yükleyici Sınıfı" Evet olarak ayarlanmış şekilde yanlış yapılandırılırsa ortaya çıkar. Bir .NET Hizmeti yükleme yöntemi, ".NET Yükleyici Sınıfı" ayarını değil, Bileşen \ Gelişmiş Ayarlar \ Hizmetler görünümünü kullanmaktır. Bileşen \ Gelişmiş Ayarlar \ Hizmetler görünümünde tanımlamalar yapmak, Windows Installer ServiceControl ve ServiceInstall Tablolarında girişler oluşturur. Bu girdiler, Hizmeti yüklemek için Windows Installer "InstallServices" eylemi tarafından kullanılır.


yardımcı olabilir ve bunu açıklayabilir misiniz .... Bileşen \ Gelişmiş Ayarlar \ Hizmetler "görünümü bulunabilir ??
pithhelmet

yükleyicinin premier sürümündedir (ffs! microsoft neden kurulum projesi türünü çıkardınız!) .. Premier sürümüne sahipseniz. community.flexerasoftware.com/…
Paul Hutchinson

Kurulum projesi adının uzunluğu ile ilgili olduğunu buldum, yani kurulum projesi adınızı "Kur" veya "Kurulum" gibi daha kısa bir adla değiştirin.
Jonty

4

Projeniz .NET ise, deneyin o zaman ServiceProcessInstaller sınıfını InstallShield LE ile kullanabilirsiniz.

InstallShield ile çalışmasını sağlamak için, InstallShield "dosyalar" ağacına gitmeniz ve dosyanıza sağ tıklamanız gerekir. Ardından "COM ve .NET ayarları" sekmesinde "Yükleyici sınıfı" onay kutusunu işaretleyin.

Çalışmasını sağladım, ancak Windows 2008R2 gibi bazı işletim sistemlerinde sorunlar yaşadım. Kilometreniz değişebilir.

İşte bir örnek: http://www.codeproject.com/Articles/14353/Creating-a-Basic-Windows-Service-in-C


1
Afedersiniz. Bunu bugüne kadar görmedim. Kabul ettiğim cevapla hemen hemen aynı cevap gibi görünüyor. + 1'leyeceğim.
56'da fizch

4

Bununla ilgili her türlü problemim vardı.

Aşağıdaki gibi.

  1. InstallShield'ın indirilmesi uzun sürer
  2. kayıt süreci bir acıdır.
  3. yapılandırma seçenekleri kafa karıştırıcı ve aşırı derecede karmaşık.
  4. bu iş parçacığındaki kabul edilen çözüm bir hack'tir ve her zaman işe yaramaz - dokümantasyonda 1001'e bakın - esasen bir Windows hizmeti yüklemek için doğru yapılandırma seçeneklerini elde etmek için ödeme duvarını geçmeniz gerekir.

Başka bir yerde belirtildiği gibi benim için çözüm - InstallShield'ı terk etmekti

görüntü açıklamasını buraya girin

O noktadan çok kolay.

Düzenleme: Güncelleme - 2013/2015 vs için https://wix.codeplex.com/releases/view/115492 adresinden en son sürümü yükleyin


3

Visual Studio kurulum projeleri, görsel stüdyo uzantısı olarak VS 2013'e geri döndü.

https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d

Lütfen çözümünüzü ve projelerinizi VS 2013'e güncelleyin. Hala VS 2010 sürümündeyseniz, doğrudan VS 2013'e yükselterek muhtemelen daha iyi durumda olabilirsiniz.

Installsheild LE ile olan deneyimim, çok tuhaf olduğu, ancak püf noktalarını bulduğunuzda, kullanımı daha kolay. Bununla birlikte, sınırlı sürümün Microsoft ve Flexera tarafından tam özellikli sürümü satmanın bir yolu olduğunu düşünüyorum. Başka bir deyişle, önce Microsoft'a Visual Studio için çok para ödüyoruz ve sonra da ortağı (suç işleyen) Installsheild için daha fazla para ödüyoruz. VS 2013'te kurulum projelerini geri getirmek zorunda kaldıkları için işe yaramayan kötü strateji.


2

Bu konu hakkında yazdım:

Windows Installer XML kullanarak InstallShield'i genişletme - Windows Hizmetleri

Temel olarak, hizmeti kapsüllemek için WiX kullanarak bir birleştirme modülü oluşturursunuz ve ardından bunu kurulum alanı projenize eklersiniz. (Dosyanızın beklediğiniz yere gittiğinden emin olmak için INSTALLDIR diziniyle ilişkilendirdiğinizden emin olun). Bir sanal makinede derleyin ve test edin. Kekin parçası.


Öğrenilecek başka bir teknoloji mi? Düne kadar WIX'i duymamıştım. Hâlâ onun hakkında hiçbir şey bilmiyorum. Görünüşe göre, sadece birkaç tıklama alan bir şey için tüm bu süreç giderek daha zor hale geliyor.
fizch

Bir yükleyiciyi ÇALIŞTIRMAK yalnızca birkaç tıklama alır . Bunları yazmak her zaman çok daha fazla çaba gerektirmiştir.
Christopher Painter

Ayrıca yükleyiciyi kurmak sadece birkaç tıklama aldı. Başlığı, üreticiyi vb. Yazmanız gerekir, ancak tüm bir xml belgesini yazmanız gerekmez. WIX hakkında bana ne söyleyebilirsiniz? Açıkça bunun hakkında çok şey bildiğini söyleyebilirim. Bu ne? Nereden bulabilirim? Bunu nasıl kullanabilirim? Etc ...
fizch

16 yıldır yükleyiciler yazıyorum ve yalnızca tek bir EXE ve kısayol ile basit yüklemeler yazmak için 'sadece birkaç tıklama' gerektiriyor. Her iki durumda da CodePlex'te WiX bulabilirsin ve konuyla ilgili yayınlanmış bir kitap var. Temel teknoloji Windows Installer'dır ve bu belgeler Platform SDK ve MSDN'de bulunabilir.
Christopher Painter

5
Cidden "konuyla ilgili yayınlanmış bir kitap var ... SDK'da dokümanlar". ?? Chris, 2010 çözümlerimizi 2012'ye taşımaya çalışıyoruz ve kurulum / kurulum bizi durduruyor. MS, VS Setup / Installer'ı geri getir visualstudio.uservoice.com/forums/121579-visual-studio/…
JimSTAT


2

Cevapta belirtildiği gibi yükleyicinin nereye ekleneceğini bulmakta bazı sorunlar yaşadım. Yani işte nasıl.

Windows hizmetinizdeki hizmet sınıfınıza çift tıklayın Project "Sınıfınıza bileşenler eklemek için, bunları Araç Kutusu'ndan sürükleyin ve özelliklerini ayarlamak için Özellikler penceresini kullanın ..." metni içeren boş bir ekran Bağlantılar dışında herhangi bir yere sağ tıklayın ve "Yükleyici Ekle" yi seçin

görüşürüz


0

Bu kurulumun daha sonra bir yükseltmesini oluşturmayı planlıyorsanız, yukarıdaki tüm açıklamaların size yardımcı olmayacağını unutmayın. InstallShiled LE, yükseltme yaptığınızda çalışan hizmeti durduramaz. Bunu Window Service Installer -> BeforeInstall olayından da yapamazsınız.


0

Bunu buraya koymak istedim;

VS 2015'te bunu yaparken, tekrar tekrar kurulum üzerine 1001 hatasıyla karşılaştım.

Bu sayfadaki yanıt, daha yeni sürümlerde (2012'den önceki herhangi bir şey) , görünüşe göre, yükleyici sınıfı seçeneğini açıkça işaretlemeden bırakmanız ve ardından, yükleyici projesinin 3. Adımının altındaki Hizmetler bölümü altına Windows hizmetinizi eklemeniz gerektiğini açıkladı:

Özel Windows Hizmeti yüklenirken 1001 hatası

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.