Yeni geliştirdiğim bir Windows Service'i kurmak istediğimde, aşağdaki gibi bir hata aldım:

Microsoft (R) .NET Framework Installation utility Version 2.0.50727.3053
Copyright (c) Microsoft Corporation. All rights reserved.


Running a transacted installation.

Beginning the Install phase of the installation.
See the contents of the log file for the d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.exe assembly's progress.
The file is located at d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.InstallLog.
Installing assembly 'd:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.exe'.
Affected parameters are:
logtoconsole =
assemblypath = d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.exe
i =
logfile = d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.InstallLog
Installing service xxxxx...
Service xxxxx has been successfully installed.
Creating EventLog source xxxxx in log Application...

An exception occurred during the Install phase.
System.ArgumentException: Source xxxxx already exists on the local computer.

The Rollback phase of the installation is beginning.
See the contents of the log file for the d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.exe assem
bly's progress.
The file is located at d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.InstallLog.
Rolling back assembly 'd:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.exe'.
Affected parameters are:
logtoconsole =
assemblypath = d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.exe
i =
logfile = d:\Projects\xxxxx\xxxxxService\bin\Release\xxxxxService.InstallLog
Restoring event log to previous state for source xxxxx.
Service xxxxx is being removed from the system...
Service xxxxx was successfully removed from the system.

The Rollback phase completed successfully.

The transacted install has completed.
The installation failed, and the rollback has been performed.
Installation complete!


Burada önemli olan kısım (hatayı içeren) şu:
An exception occurred during the Install phase.
System.ArgumentException: Source xxxxx already exists on the local computer.


Bu hata sonrasında servis kurulumu rollback oluyor ve işlem başarısızlıkla sonlanıyor.

Anlayabildiğim kadarıyla problem şundan kaynaklanıyor: Yazdığım servis kendi adıyla bir event log tipi yaratıyordu. Servis adı da aynıydı. Kurulum sırasında otomatik olarak bu isimle bir event log tipi yaratılmak isteniyor, ancak önceden olduğu için hata alıyor.

Çözüm olarak şunu yapmak gerekiyor. Regedit aracılığı ile aşağıdaki konumda, servisinizin adı ile yaratılmış kayıtları silmeniz gerekli.
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\#servisadı#
\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\#servisadı#

#servisadı# olarak gösterilen kısımlar yerine servisinizin adı gelecek şekilde silme işlemini yapın ve tekrar kurulum yapın, sorunun çözüldüğünü göreceksiniz.

Bu arada bu işlem sonrasında yazılımınızın çalışmasında bir sorun olmaması için sizin de aynı hataya düşmemeniz gerekli. Yani varsa event log tipini eklememeniz gerekli. C# için basit bir örnek şöyle olabilir bu kontrol için:
if (!EventLog.SourceExists(sSource))
EventLog.CreateEventSource(sSource, sLog);


Eğer bu kontrolünüz varsa, yukarıda registryden silme işlemi yapsanız bile yazılımınız sorunsuz çalışacaktır...

1 Response to "Windows Service kurulum hatası ve çözümü"

  1. gravatar Z. Says:

    Aynı servis adıyla başka bir servis kurulamıyor bildiğim kadarıyla. Aynı servisi ancak başka isimlerle kurmak mümkün. Paylaşayım dedim.

Copyright Ali INAL ©2009 - Creative Commons Licence
preload preload preload

Taşındık!


Ali's Surprisingly Web blog'u, artık yeni, güçlü ve daha esnek altyapısıyla yeni adresinden yayın yapıyor. Yeni adresimiz: http://surprisingly.web.tr. Bu eski blog sayfalarındaki bütün içerik, yeni blog altyapısına da taşındı. Arzu ederseniz sizi yeni blog'umda ağırlamak isterim.
Yeni blog'a gitmek istiyorum Bu sayfayı okumak istiyorum

We've Moved!


Ali's Surprisingly Web Blog is now serving from a new, stronger and flexible system with a brand new address. Our new address: http://surprisingly.web.tr. Also we've migrated all old content from this blog to our new blog. If you wish, I want to welcome yo to my new blog.
I want to visit new blog I want to stay and read this page