29 Mart 2012 Perşembe

windows service uygulamalarında localde kontrol sağlamak. Yazılan Windows Servicenin Debug edilebilmesi

Bir windows service yazarken en çok ihtiyaç duyulan noktalardan biri de debug ile kontrol işleminin yapılabilmesidir. bunun için bir çok yöntem var, ama ben en kısa ve özet olarak bir yol göstermek istiyorum .
Localde servis kurulumu yapmadan kontrol edebilmemiz için projemize timer ekleyip.
Servisimizin kontrolünü yapabiliriz.

serviceBase clasının OnStart ve OnStop özelliğini de kullanarak aşağıdaki yapıyı oluşturup, her bir olaya breakpoint ile kontol edebilirsiniz.

protected override void OnStart(string[] args)
{
myTimer.AutoReset = true;
myTimer.Enabled = true;
}

protected override void OnStop()
{
myTimer.AutoReset = true;
myTimer.Enabled = false;
}

private void TimerTick(object sender, System.Timers.ElapsedEventArgs e)
{
myTimer.Enabled = false;

try
{
UpdServicesTable();
}
catch (Exception ex)
{
ExceptionHandler.SendExceptionMail(ex);
}
finally
{
transfer_islemi();
myTimer.Enabled = true;
}
}


Not: projeyi derlediğinizde karşınıza servisi kurmanız gerektiğini bildiren uyarı çıkabilir bunu dikkate almadan 10 saniye (timer'ın tick süresi) bekleyiniz.
Ayrıca servisi kurmak isterseniz de, prjenize installer eklyip installerin properties ini, servisinizin çalışacağı yere göre ayarlarsınız. Örneğin user, localsystem vs. gibi.

Eğer kurulum yapmak isterseniz ise comand prompt pencersini açıp, "cd dizinadı" komutunu uygulayarak servisinizin "Debug" klasörüne girip, burada
installUtil serciveismi.exe komutunu çalıştırarak kurulumu yapabilirsiniz.

Kurulum sırasında komut satırında şu hata ile karşılaşırsanız,
şu=

An exception occurred during the Install phase.
System.InvalidOperationException: Installation failed due to the absence of a Se
rviceProcessInstaller. The ServiceProcessInstaller must either be the containing
installer, or it must be present in the Installers collection on the same insta
ller as the ServiceInstaller.

bu demek tir ki daha önce kurulu bu isimde bir servis var, bunu gör bilmek için
ve sile bilmek için de

başlat-> çalıştıra "regedit" yazıp registry Editör pencersine ulaşabilirsiniz.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog
dizinin açıp içerisinde çalışan servisleri görebilirsiniz.
aynı isimde servis var ise kaldırın yok ise
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog buradaki dizini inceleyiniz
var ise kaldrınız.

bu işlemleri yapmak yerine yine komut satırına
InstallUtil.exe /u "ServiceInstallerismi.exe" yazıp bu şekilde de kaldırabilirsiniz.

Not: kurulumu yaptığınızda servisiniz çalışı çalışmadığın görmek için bilgisayarınıza sağtıklayıp yönet dediğinizde çıkan pencereden, hizmetler(services) i görebilirsiniz.

28 Mart 2012 Çarşamba

Interop type '...' cannot be embedded. Use the applicable interface instead. Hatası na çözüm

Interop type '...Class' cannot be embedded. Use the applicable interface instead.

bu şekilde bir hata aldığınızda .net 4.0 kullanıyorsanız
yaptığınız tanımlamada class ifadesini kaldırın.

örneğin

SQLXMLBULKLOADLib.SQLXMLBulkLoad4Class objBL = new SQLXMLBULKLOADLib.SQLXMLBulkLoad4Class();

yerine

SQLXMLBULKLOADLib.SQLXMLBulkLoad4 objBL = new SQLXMLBULKLOADLib.SQLXMLBulkLoad4();

bu şekilde düzeltiniz.