Çözüldü C# Çalışan Uygulamayı Tespit Etme

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Zevahir

Kilopat
Katılım
14 Temmuz 2016
Mesajlar
240
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Merhaba dostlar, C#'ta bir uygulama yapıyorum. Bu uygulama başka bir uygulamadan veri alacak bunun için o programın çalışmasını tespit etmem gerekiyor, yani şöyle; eğer o program çalışıyorsa şunlar şunlar yapılacak. Bunu nasıl koda dökebilirim?
 
Son düzenleyen: Moderatör:
Çözüm
Örnekte Bluestacks.exe uygulamasının çalışıp çalışmadığı kontrol ediliyor. Büyük küçk harf duyarlı.
Kod:
...
using System.Diagnostics;
...
Process[] processes = Process.GetProcesses();
foreach (Process p in processes)
{
    if (p.ProcessName.Equals("Bluestacks"))
    {
        MessageBox.Show("evet");
        break;
     }
}
HTTP üzerinden konuşturabilirsiniz uygulamalarınızı. Böylece uygulamaların farklı bilgisayarlar/sunucular üzerinde çalışmasını sağlayabilirsiniz. Umarım bunu da Teamviewer üzerinden yapmamızı istemezsiniz.
 
HTTP üzerinden konuşturabilirsiniz uygulamalarınızı. Böylece uygulamaların farklı bilgisayarlar/sunucular üzerinde çalışmasını sağlayabilirsiniz. Umarım bunu da Teamviewer üzerinden yapmamızı istemezsiniz.
Aslında sorum önerdiğiniz çözüme göre daha basit çünkü yazdığım programda tespit edilecek program da aynı bilgisayarda. Yani program yerelde çalışacak ve tespit edilecek, program da yerelde çalışacak.
 
Son düzenleyen: Moderatör:
Örnekte Bluestacks.exe uygulamasının çalışıp çalışmadığı kontrol ediliyor. Büyük küçk harf duyarlı.
Kod:
...
using System.Diagnostics;
...
Process[] processes = Process.GetProcesses();
foreach (Process p in processes)
{
    if (p.ProcessName.Equals("Bluestacks"))
    {
        MessageBox.Show("evet");
        break;
     }
}
 
Çözüm
2 uygulama arasinda veri transferini nasil saglayacaksan ( biri digerinden veri alacak demissin ) , birisi digerinin calisip calismadigini da ayni metod ile anlayabilmeli.

Iletisim saglanamiyorsa calismiyordur.

Ya da birisi ile spesifik bir lokasyonda lock file olustur. Eger uygulama calisiyorsa, dosya vardir ve lock'lidir. Ama zaten aralarinda iletisim kuracaklarsa boyle taklalara gerek olmamali.
 
Örnekte Bluestacks.exe uygulamasının çalışıp çalışmadığı kontrol ediliyor. Büyük küçk harf duyarlı.
Kod:
...
using System.Diagnostics;
...
Process[] processes = Process.GetProcesses();
foreach (Process p in processes)
{
    if (p.ProcessName.Equals("Bluestacks"))
    {
        MessageBox.Show("evet");
        break;
     }
}
Teşekkürler aradığım cevap buydu sorun çözüldü.
 
Son düzenleyen: Moderatör:
Şu alıntıyı paylaşayım seninle, sorunun çözülmüş ancak o yolla program sonlandırmak isteyenlerin işine yarar belki. Bir ara bana da lazım olmuştu.

İlginiz için cidden teşekkür ederim. Üzerinde çalıştığım yazılımda "çalıştırılan programı tekrardan kapatabilmem için programa ait bir bilgi - kimlik yakalamam ve onu kullanabilmem" gerekiyordu.
Ne yalan söyleyeyim 10 saattir sizlerin de paylaştığı komutları deniyorum, test ediyorum.

Process.GetProcessesByName komutu kapatmaya yarıyor ancak çalıştırılan programın kimliğini de bir şekilde bulup o ("") 2 parantez arasına sokabilmek gerekiyor anladığım kadarıyla.

Öncelikle OpenFileDialog ile bir pencere açtırıp müşteriye istenilen kriterlere uygun dosya seçtiriliyor. FileName komutu ile dosyanın konum bilgisi alınıp aşağıdaki kod ile uygulama çalıştırılıyor başarılı bir biçimde.

Kod:
System.Diagnostics.Process.Start(@listBox2.Items[listBox1.SelectedIndex].ToString());

Seçilen dosyanın exe uzantılı halde bilgisini de dosya.SafeFileName komutu ile elde ediyoruz.

Kod:
OpenFileDialog dosya = new OpenFileDialog();
            dosya.Filter =" Uygulama Dosyaları (*.exe) |*.exe*";
            dosya.Title = "Oyun Seçme Ekranı";
            dosya.ShowDialog();
            string DosyaYolu = dosya.FileName;
            textBox2.Text = DosyaYolu;
            textBox4.Text = dosya.SafeFileName;

Resimdeki AD kısmı bilgisindeki değeri elimize çıkartıyor kısacası. PID yerine AD ile yürümüş olduk kısacası :)
Eki Görüntüle 196483

Son kısımda ise .exe ekini atıyoruz. Geriye temiz, EXE uzantısı olmayan bir AD kalıyor.
Kod:
textBox5.Text = textBox4.Text.Substring(0,textBox4.Text.Length - 4);
Onu da @Erkan Çevik 'in verdiği kod ile sonlandırıyoruz kolayca :)
Foreach döngüsü kuruyoruz ki Chrome gibi aynı isim ile birden çok uygulama başlatan programlar tamamen kapatılabilsin.

Kod:
Process[] programkapat = Process.GetProcessesByName(textBox5.Text);

            if (programkapat.Length > 0)
            {
                foreach (Process p in programkapat)
                {
                    p.Kill();
                }
            }

Aynı sorundan müzdarip olabilecek insanlar için detaylı yazdım, teşekkür ederim yardımlarınız için.
 
Uyarı! Bu konu 6 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Geri
Yukarı