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...

This post is also available in English

Bir süredir evde kullanmaya başladığım Windows 7'den oldukça memnun sayılırım. Hatta kısa sürede özellikle performansından dolayı fanatiği oldum diyebilirim.

Diyebilirdim yada. Bugün IIS üzerinde bir websitesini çalıştırmak tam 1 saat 40 dakikamı alana kadar.

Acısız olmasını beklemiyordum ama bu kadar kanlı olmasını da beklemiyordum açıkçası. Her zaman yaptığımız gibi sitemi oluşturdum, hemen görmek istedim boş sayfayı. IIS'i açtığımda IIS 7.5'un jelibon-bonbon yüzünü görünce işlerin iyi gitmeyeceği içime doğmuştu zaten. Neyse, websitesi tanımlamasını yaptım. Tarayıcıya yöneldim ve ilk hata:

HATA 1: HTTP Error 500.19 / Error Code: 0x80070005 / Config Error: Cannot read configuration file due to insufficient permissions

Araştırma süreci başladı tabi ki. Sorunun yetki hatası olduğu belliydi. Web projesinin dizinine IIS_IUSRS kullanıcısına yetki verdim. Tarayıcıda sayfayı refresh ettim ve ikinci hata:


HATA 2: HTTP Error 500.19 / Error Code: 0x80070021 / Config Error: This configuration section cannot be used at this path. This happens when the section is locked at parent level....

En fazla bilgi öğreten hata bu oldu. Her ne kadar öğrendiklerim hata ile ilgili olmasa da... Araştırmalar sonucunda kolay bir çözümü olduğunu öğrendim.
%windir%\system32\inetsrv\config\applicationhost.config konumundaki dosyayı açıp, içerisindeki

<section name="handlers" overrideModeDefault="Deny" />
<section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
satırlarındaki "Deny" ibarelerini "Allow" yapmak. Bu sayede bu section'ların web.config üzerinden override edilmesine izin vermek.
İşlem kolay, kolay olmasına da dosyayı bulabilirsen... Hemen Total Commander'ıma geçtim, dizine gittim, o da ne, dizin boş? Ara tara boş. Hemen cmd'ye geçtim. Dizine gittim yok da yok.
En sonunda bir forumda "SYSWOW32 Redirection" denen bir zımbırtıyı öğrendim. 64Bit işletim sistemlerinde, sistem dizini iki adet. Bir System32 bir de SysWOW64. Ancak bütün yazılımlar sistem dizinine aynı şekilde erişmek isteyeceği için, Microsoft, 32 Bit'lik yazılımlar sistem dizinlerine erişirken "SYSWOW32 Redirection" ile onları 32Bit dizinine atıyor. Yani dizine gözatmak için kullandığınız yazılım (bende Total Commander ve cmd) 32 bit ise, dizinde hiçbirşey olmuyor, çünkü o dizin o dizin olmuyor.
Bunu da öğrendikten sonra 64Bit'lik Notepad ile tam dosya adresi vererek dosyayı açmaya muktedir oldum ve değişiklikleri yaptım. Tarayıcıya döndüm, refresh veee buyrun 3. hata:


HATA 3: HTTP Error 401.3 / Error Code: 0x80070005 / Unauthorized

Uzun araştırmalardan sonra, sorunun IIS7.5 üzerindeki site yetkilendirmesindeki bir sorun olduğunu tespit edebildim. Düzeltmek için şu adımları izlemek gerekiyor:
1. IIS7.5'a girilir,
2. "Sites" dalı genişletilir, sorunlu web sitesinin adına tıklanır.
3. Sağ taraftan "Authentication"a çift tıklanır.
4. "Anonymous Authentication" öğesine sağ tıklanır "Edit..." denir.
5. "Application Pool Identity" seçenği işaretlenir
6. Kaydedilir.
Adımları tamamladım, büyük bir hevesle "bu sefer tamam" diyerek tarayıcıya döndüm F5 veeee 4.hata:


HATA 4: HTTP Error 404.3 / Error Code: 0x80070032 / Not Found

Hata mesajından ASP.NET handler'ının çalışmadığını düşündüm ama, jelibon-bonbon IIS7.5'da nasıl bulasın da düzeltesin handlerları. Bu sefer onu aramaya başladım. Handlerların yerini tespit ettim ama ASP.NET handler'larının yerinde yeller esiyordu. Meğerse Windows 7, Framework kurulsa dahi, ayrı ASP.NET bileşenlerini aktive etmeyi gerektiriyor. Bunun için denetim masasından "Programs and Features" altından "Turn Windows Features on or off" diyoruz ve çıkan ağaçta şu dala kadar gidiyoruz: "Internet Information Services/World Wide Web Services/Application Development Features". Buradaki öğelerden, "CGI" hariç diğerlerini işaretliyoruz.

Bu işelmi de tamamladım tarayıcıda refresh, yine bir hata. Ama bu sefer ne güzel ki artık sarı ASP.NET hata sayfası görebilmeye başlamıştım. Anlamsız bir hataydı ama bir compile edeyim projeyi tekrar dedim. Netekim düzeldi ve boş, düz beyaz Default.aspx sayfamı görmeyi başardım...

Yukarıda anlattığım sorunlar, orası burası kurcalanmış yada uzun süredir kullanılarak sorunlara yol açılmış bir Windows kurulumnda değil, 3-4 gün önce yeni işletim sistemi ve 1 gün önce de yeni Visual Studio 2008 kurulumu ile tam manasıyla bir out-of-the-box sistem üzerinde meydana geldi.

Umarım bu sorunları yaşayan birilerin biraz faydam dokunur...

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