Merhaba değerli Webkolog.net takipçileri, bugünkü yazımızda C# .NET Framework 4 ile uygulamalarımızdan başka uygulamaları başlatmamızı, yönetmemizi ve hatta onlarla etkileşim kurmamızı sağlayan Process
sınıfını yakından inceleyeceğiz. Process
sınıfı, işletim sistemi seviyesinde süreçleri (process) kontrol etmek için güçlü bir araçtır. Gelin, Process
sınıfının temel özelliklerini, metotlarını ve kullanım senaryolarını birlikte keşfedelim.
Process
Sınıfı Nedir?
Process
sınıfı, System.Diagnostics
ad alanında bulunur ve yerel bir süreç (program veya uygulama) hakkında bilgi sağlamak ve bu süreci kontrol etmek için kullanılır. Bir süreç, işletim sisteminin çalıştırdığı bir programın örneğidir. Process
sınıfı sayesinde yeni süreçler başlatabilir, çalışan süreçleri sonlandırabilir, süreçlerin kaynak kullanımını izleyebilir ve hatta süreçlerin standart giriş/çıkış akışlarını yönlendirebiliriz.
Process
Sınıfının Temel Özellikleri ve Metotları
İşte Process
sınıfının en sık kullanılan özellikleri ve metotları:
Süreç Başlatma ve Kontrol
Process.Start()
: Yeni bir süreç başlatır. Bu metodun birçok aşırı yüklenmiş (overloaded) versiyonu vardır. En basit haliyle bir uygulama dosyasını veya bir URL'yi açabilir.StartInfo
: Bir sürecin nasıl başlatılacağını yapılandıranProcessStartInfo
nesnesini alır. Bu nesne aracılığıyla başlatılacak dosya adı, argümanlar, çalışma dizini, pencere stili ve giriş/çıkış yönlendirmesi gibi ayarlar yapılır.FileName
: Başlatılacak uygulamanın veya belgenin adı/yolu.Arguments
: Uygulamaya geçirilecek komut satırı argümanları.UseShellExecute
: İşletim sisteminin kabuğunu (shell) kullanarak süreci başlatıp başlatmayacağını belirler (true
ise dosya ilişkilendirmeleri kullanılır,false
ise doğrudan yürütülür).RedirectStandardOutput
: Sürecin standart çıktısını yönlendirip yönlendirmeyeceğini belirler.RedirectStandardError
: Sürecin standart hata çıktısını yönlendirip yönlendirmeyeceğini belirler.CreateNoWindow
: Süreç için yeni bir pencere oluşturup oluşturmayacağını belirler (true
ise pencere görünmez).WindowStyle
: Sürecin başlangıç pencere stilini belirler (örneğin,Normal
,Maximized
,Minimized
,Hidden
).
Kill()
: Süreci zorla sonlandırır. Bu, sürecin beklenmedik bir şekilde kapanmasına neden olabilir ve kaynakların düzgün serbest bırakılmamasına yol açabilir. Genellikle son çare olarak kullanılır.CloseMainWindow()
: Sürecin ana penceresini nazikçe kapatmaya çalışır. Sürecin kendisi kapanmayabilir, sadece penceresi kapanır.WaitForExit()
: Çağrı yapan thread'i, sürecin sonlanmasını bekletir. Belirli bir süre (milisaniye) bekletme seçeneği de vardır.
Süreç Bilgileri
ProcessName
: Sürecin adını alır (örneğin, "notepad", "chrome").Id
: Sürecin benzersiz kimliğini (Process ID - PID) alır.MainWindowHandle
: Sürecin ana penceresinin tanıtıcısını (handle) alır.MainWindowTitle
: Sürecin ana penceresinin başlığını alır.HasExited
: Sürecin sonlanıp sonlanmadığını gösteren birbool
özelliğidir.ExitCode
: Sürecin sonlanma kodunu alır.
Çalışan Süreçleri Bulma
Process.GetProcesses()
: Sistemde çalışan tüm süreçlerin bir dizisini (Process[]
) döndürür.Process.GetProcessesByName(string processName)
: Belirtilen ada sahip tüm çalışan süreçlerin bir dizisini döndürür.
Process
Kullanım Senaryoları
1. Basit Bir Uygulama Başlatma
Bu örnekte, Not Defteri uygulamasını başlatacağız.
using System;
using System.Diagnostics; // Process için
class ProcessOrnek1
{
static void Main()
{
try
{
// Not Defteri uygulamasını başlat
Process.Start("notepad.exe");
Console.WriteLine("Not Defteri başlatıldı.");
}
catch (Exception ex)
{
Console.WriteLine("Uygulama başlatılırken hata oluştu: " + ex.Message);
}
Console.ReadLine();
}
}
2. Uygulamayı Argümanlarla Başlatma
Bu örnekte, Not Defteri'ni belirli bir metin dosyasıyla açacağız.
using System;
using System.Diagnostics;
using System.IO; // File.WriteAllText için
using System.Windows.Forms; // Application.StartupPath için
class ProcessOrnek2
{
static void Main()
{
string filePath = Application.StartupPath + "\\test.txt";
// Test dosyası oluştur
File.WriteAllText(filePath, "Bu bir test dosyasıdır.\nWebkolog.net");
try
{
// Not Defteri'ni oluşturduğumuz dosya ile başlat
Process.Start("notepad.exe", filePath);
Console.WriteLine("Not Defteri '{0}' dosyası ile başlatıldı.", filePath);
}
catch (Exception ex)
{
Console.WriteLine("Uygulama başlatılırken hata oluştu: " + ex.Message);
}
Console.ReadLine();
}
}
3. Süreci Sonlandırma
Bu örnekte, çalışan bir Not Defteri sürecini bulup sonlandıracağız.
using System;
using System.Diagnostics;
using System.Threading; // Thread.Sleep için
class ProcessOrnek3
{
static void Main()
{
Process notepadProcess = null;
try
{
// Not Defteri'ni başlat
notepadProcess = Process.Start("notepad.exe");
Console.WriteLine("Not Defteri başlatıldı. PID: " + notepadProcess.Id);
// 3 saniye bekle
Thread.Sleep(3000);
// Süreci sonlandır
if (!notepadProcess.HasExited) // Eğer süreç hala çalışıyorsa
{
notepadProcess.Kill(); // Süreci zorla sonlandır
Console.WriteLine("Not Defteri sonlandırıldı.");
}
}
catch (Exception ex)
{
Console.WriteLine("Süreç yönetilirken hata oluştu: " + ex.Message);
}
finally
{
if (notepadProcess != null)
{
notepadProcess.Dispose(); // Kaynakları serbest bırak
}
}
Console.ReadLine();
}
}
4. Süreç Çıktısını Yönlendirme (Console Uygulamaları için)
Bir konsol uygulamasının çıktısını yakalamak için RedirectStandardOutput
özelliğini kullanabiliriz.
using System;
using System.Diagnostics;
using System.IO;
class ProcessOrnek4
{
static void Main()
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe"; // Komut istemcisini başlat
p.StartInfo.Arguments = "/c dir"; // 'dir' komutunu çalıştır ve çık (/c)
p.StartInfo.UseShellExecute = false; // Kabuk yürütmesini kullanma
p.StartInfo.RedirectStandardOutput = true; // Çıktıyı yönlendir
p.StartInfo.CreateNoWindow = true; // Pencere oluşturma
try
{
p.Start();
// Sürecin çıktısını oku
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit(); // Sürecin bitmesini bekle
Console.WriteLine("Komut Çıktısı:\n" + output);
}
catch (Exception ex)
{
Console.WriteLine("Süreç çalıştırılırken hata oluştu: " + ex.Message);
}
finally
{
if (p != null)
{
p.Dispose();
}
}
Console.ReadLine();
}
}
5. Çalışan Süreç Bilgilerini Alma
Sistemde çalışan süreçleri listeleyebilir ve onlar hakkında bilgi alabiliriz.
using System;
using System.Diagnostics;
class ProcessOrnek5
{
static void Main()
{
Console.WriteLine("Çalışan Süreçler:");
Process[] processes = Process.GetProcesses(); // Tüm süreçleri al
foreach (Process p in processes)
{
try
{
Console.WriteLine("-------------------------------------");
Console.WriteLine("PID: " + p.Id);
Console.WriteLine("İsim: " + p.ProcessName);
Console.WriteLine("Başlık: " + p.MainWindowTitle);
Console.WriteLine("Bellek Kullanımı (MB): " + (p.WorkingSet64 / (1024 * 1024)).ToString());
}
catch (Exception ex)
{
// Bazı süreçlere erişim izni olmayabilir
Console.WriteLine("Süreç bilgisi alınırken hata: " + ex.Message);
}
}
Console.ReadLine();
}
}
---
Evet sevgili Webkolog.net okurları, bu yazımızda C# .NET Framework 4 ile Process
sınıfının temel özelliklerini, metotlarını ve kullanım senaryolarını detaylı bir şekilde inceledik. Process
sınıfı, uygulamalarınızdan başka programları başlatmak, yönetmek ve onlarla etkileşim kurmak için güçlü bir araçtır. Otomasyon görevleri, sistem yönetimi araçları veya harici uygulamalarla entegrasyon gibi birçok senaryoda bu sınıfın gücünden faydalanabilirsiniz. Umarım bu rehber, C# .NET Framework 4 ile uygulamalar geliştirirken size yardımcı olur. Bir sonraki yazımda, C# dilinin diğer önemli yapı taşlarını keşfetmeye devam edeceğiz. Webkolog.net'i takipte kalın!
Hepinize süreçlerle dolu ve başarılı geliştirme deneyimleri dilerim!
0 yorum:
Yorum Gönder