Bu nedenle, müşteri uygulamamıza veri beslemek için bir Windows hizmeti ürettik ve her şey harika gidiyor. İstemci, bu hizmetin aynı sunucuda çalışan ve ayrı veritabanlarını işaret edecek şekilde yapılandırılmış iki örneğini gerektiren eğlenceli bir yapılandırma isteği ile geldi.
Şimdiye kadar bunu gerçekleştiremedim ve yığın aşımı üyelerimin neden olduğuna dair bazı ipuçları verebileceğini umuyordum.
Mevcut kurulum:
Windows hizmetini içeren projeyi kurdum, bundan sonra buna AppService adını vereceğiz ve hizmet adını App.config içindeki bir anahtara dayalı olarak ayarlamak için özel kurulum adımlarını işleyen ProjectInstaller.cs dosyası gibi. :
this.serviceInstaller1.ServiceName = Util.ServiceName;
this.serviceInstaller1.DisplayName = Util.ServiceName;
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
Bu durumda Util, yapılandırma dosyasından hizmet adını yükleyen statik bir sınıftır.
Bundan sonra, her iki hizmeti de kurmak için iki farklı yol denedim ve her ikisi de aynı şekilde başarısız oldu.
İlk yol, hizmetin ilk kopyasını kurmak, kurulu dizini kopyalayıp yeniden adlandırmak ve ardından istenen hizmet adını değiştirmek için uygulama yapılandırmasını değiştirdikten sonra aşağıdaki komutu çalıştırmaktı:
InstallUtil.exe /i AppService.exe
Bu işe yaramadığında ikinci bir yükleyici projesi oluşturmaya çalıştım, yapılandırma dosyasını düzenledim ve ikinci yükleyiciyi oluşturdum. Yükleyiciyi çalıştırdığımda iyi çalıştı ancak hizmet services.msc'de görünmedi, bu yüzden önceki komutu ikinci yüklü kod tabanına karşı çalıştırdım.
Her iki seferinde InstallUtil'den aşağıdaki çıktıyı aldım (yalnızca ilgili parçalar):
İşlem yapılmış bir kurulumu çalıştırma.
Kurulumun Kurulum aşamasının başlangıcı.
App Service Two hizmeti yükleniyor ... Service App Service Two başarıyla yüklendi. EventLog kaynak Uygulama Hizmeti İki günlük Uygulamasında oluşturuluyor ...
Kurulum aşamasında bir istisna meydana geldi. System.NullReferenceException: Nesne başvurusu bir nesnenin örneğine ayarlanmadı.
Kurulumun geri alma aşaması başlıyor.
Kaynak App Service Two için olay günlüğü önceki durumuna geri yükleniyor. Service App Service Two sistemden kaldırılıyor ... Service App Service Two sistemden başarıyla kaldırıldı.
Geri alma aşaması başarıyla tamamlandı.
İşlem yapılan yükleme tamamlandı. Kurulum başarısız oldu ve geri alma gerçekleştirildi.
Uzun soluklu gönderi için özür dilerim, yeterince alakalı bilgi olduğundan emin olmak istedim. Şimdiye kadar beni şaşkına çeviren parça, hizmetin kurulumunun başarıyla tamamlandığını ve ancak NullReferenceException'ın atılmış gibi göründüğü EventLog kaynağını oluşturmaya gittikten sonra olduğunu belirtmesidir. Bu yüzden, neyi yanlış yaptığımı bilen veya daha iyi bir yaklaşımı olan biri varsa çok takdir edilecektir.
http://journalofasoftwaredev.wordpress.com/2008/07/16/multiple-instances-of-same-windows-service/
. İnstallutil'i çalıştırdığınızda istediğiniz hizmet adını almak için yükleyiciye kod ekleyebilirsiniz.