Uygulama İçerisinden Başka Bir Uygulama Tetikleme (System.Diagnostics.Process Class)

Bir uygulama içerisinden başka bir uygulamayı .net fonksiyonları ile kolayca tetikleyebiliriz. Bunun için Process sınıfını kullanıyoruz. Bu sınıf System namespace’inde bulunur. System.dll içerisinde yer aldığından ve system.dll default olarak uygulamamızın referanslarında yer aldığı için  bizim referans göstermemize gerek yoktur.

Bu sınıfı kullanabilmemiz için projemizin using kısmına System.Diagnostics‘i eklememiz gerekmektedir.

using System.Diagnostics;

Process.Start Methodu

Process.Start methodu ile  dizini belirtilmiş uygulama tetiklenmektedir.

Aşağıdaki kod bloğu ile dizini belirtilmiş olan exe tetiklenmektedir.

System.Diagnostics.Process process = new System.Diagnostics.Process();

process.StartInfo.FileName = “D:\\eba.net\\Exeler\\service_restart.exe”;

process.Start();

Üstad Mimar Sinan’dan 400 sene Sonrasına Mektup

Bir Mimar Sinan eseri olan Şehzadebası Cami´nin 1990´li yıllarda devam eden restorasyonunu yapan firma yetkililerinden bir inşaat mühendisi, caminin restorasyonu sırasında yaşadıkları bir olayı tv´de şöyle anlatmıştı.

Cami bahçesini çevreleyen havale duvarında bulunan kapıların üzerindeki kemerleri oluşturan taşlarda yer yer çürümeler vardı. Restorasyon programında bu kemerlerin yenilenmesi de yer alıyordu. Biz inşaat fakültesinde teorik olarak kemerlerin nasıl inşaat edildiğini öğrenmiştik fakat taş kemer inşaası ile ilgili pratiğimiz yoktu. Kemerleri nasıl restore edeceğimiz konusunda ustalarla toplantı yaptık. Sonuç olarak kemeri alttan yalayan bir tahta kalıp çakacaktık. Daha sonra kemeri yavaş yavaş söküp yapım teknikleri ile ilgili notlar alacaktık ve yeniden yaparken bu notlardan faydalanacaktık.

Kalıbı yaptık. Sökmeye kemerin kilit taşından başladık. Taşı yerinden çıkardığımızda hayretle iki taşın birleşme noktasında olan silindirik bir boşluğa yerleştirilmiş bir cam şişeye rastladık.

Şişenin içinde dürülmüş beyaz bir kâğıt vardı. Şişeyi açıp kâğıda baktık. Osmanlıca bir şeyler yazıyordu. Hemen bir uzman bulup okuttuk. Bu bir mektup idi ve Mimar Sinan tarafından yazılmıştı. Şunları söylüyordu:

“Bu kemeri oluşturan taşların ömrü yaklaşık 400 senedir. Bu müddet zarfında bu taşlar çürümüş olacağından siz bu kemeri yenilemek isteyeceksiniz. Büyük bir ihtimalle yapı teknikleri de değişeceğinden bu kemeri nasıl yeniden inşaa edeceğinizi bilemeyeceksiniz. İşte bu mektubu ben size, bu kemeri nasıl inşa edeceğinizi anlatmak için yazıyorum.”

Koca Sinan mektubunda böyle başladıktan sonra o kemeri inşa ettikleri taşları Anadolu´nun neresinden getirttiklerini söyleyerek izahlarına devam ediyor ve ayrıntılı bir biçimde kemerin inşaasını anlatıyordu.

Bu mektup bir inşanın, yaptığı işin kalıcı olması için gösterebileceği çabanın insanüstü bir örneğidir. Bu mektubun ihtişamı, modern çağın insanlarının bile zorlanacağı taşın ömrünü bilmesi, yapı tekniğinin değişeceğini bilmesi, 400 sene dayanacak kâğıt ve mürekkep kullanması gibi yüksek bilgi seviyesinden gelmektedir. Şüphesiz bu yüksek bilgiler de o koca mimarin erişilmez özelliklerindendir. Ancak erişilmesi gerçekten zor olan bu bilgilerden çok daha muhteşem olan 400 sene sonraya çözüm üreten sorumluluk duygusudur.

By mcoban Posted in Tarih

Windows Servislerini Resetleme

Geliştirdiğimiz uygulama Windows servislerine yada kendi geliştirdiğimiz bir servise bağımlı ise uygulamamızın çalışır durumda ayakta kalabilmesi, bu servislerin durumuna bağlı oluyor. Servisler uygulama için hayati önem arzediyorsa, schedule edilmiş harici bir exe ile bu servisler kontrol edilip durmuş servisler başlatılabilir yada belirlediğimiz servisler restart edilebilir.

Servisler üzerinde işlem yapabilmek için ServiceController sınıfını kullanırız. Bu sınıf System.ServiceProcess namespace’inde bulunur. ServiceController  sınıfını kullanabilmemiz için projemize System.ServiceProcess.dll dosyasını referans olarak eklememiz gerekmektedir.

System.ServiceProcess.dll Download

Sonrasında projemizin using kısmına System.ServiceProcess‘i eklememiz gerekmektedir.

using System.ServiceProcess;

Service Controller Status Özelliği

Status özelliğini kullanarak sorguladığımız servis hakkında bilgi sahibi olabiliriz. Status özelliği ServiceControllerStatus, enum tipinde değer döndürür.

Statü Adı Açıklama
ContinuePending Servis durdurulmuş ve başlatılıyor.
Paused Servis durdurulmuş.
PausePending Servis durduruluyor.
Running Servis çalışıyor.
StartPending Servis başlatılıyor.
Stopped Servis çalışmıyor.
StopPending Servis durduruluyor.

Uzak Makinadaki Bir Servisin Durumunu Belirleme

Aşağıdaki kod bloğu ile  “UzakSunucuAdı” isimli uzak sunucudaki “servisadı” isimli servisin çalışırlığı kontrol edilir.  Eğer kontrol edilen servis local bir sunucu ise 2. parametre olan uzak sunucu adı yazmaya gerek kalmaz.

ServiceController service = new ServiceController("servisadı""UzakSunucuAdı");
if (service .Status == ServiceControllerStatus.Running)
{
 MessageBox.Show("Servis Çalışıyor");
}

Servisleri Restart Etme

Belirlediğimiz servisleri bir döngü ile önce stop edip sonra tekrar start ederek restart edebiliriz. Stop komutu verildikten sonra  statü “Stopped” olana kadar beklenir.  Ardından Start komutu verilir ve tekrar statü “Running” olana kadar beklenir. Bu işlemin ardından ilgili servis restart edilmiş olur.

Aşağıdaki kod bloğu srvc  dizisi içerisinde tanımlanmış servisleri restart etmektedir.

public void service_restart()
{

string[] srvc = { “servicename1”, “servicename2”, “servicename3″ };

for (int i = 0; i < srvc .Length; i++)
{
ServiceController service = new ServiceController(srvc [i],);
TimeSpan timeout = TimeSpan.FromMilliseconds(30000);

try
{
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
Console.WriteLine(srvc[i] + ” Servisi Durduruldu”);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message + ” Servis Durdurma Hatası. Servis Adı: ” + subservice[i]);
}

try
{
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
Console.WriteLine(subservice[i] + ” Servisi Başlatıldı”);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + ” Servis Başlatma Hatası Servis Adı: ” + subservice[i]);
}
}
}