İlginizi Çekebilir
  1. Ana Sayfa
  2. C Sharp

C# ile Programın Tek Sefer Açılması

C# ile Programın Tek Sefer Açılması
+ - 0

C# ile Programın Tek Sefer Açılması, yazımız ile c sharp eğitimleimize devam ediyoruz. Bu yazımızda projelerimizin sadece bir kere açılmasını sağlayacağız. Bu işlem her zaman lazım olmasa da kullanmamız gereken zamanlar illaki geliyor. Bu işlem için birden fazla yol vardır. Bu yazımda ikisini sizlerle paylaşacağım. C Sharp ile Programın Tek Sefer Açılması yazımıza geçelim

 

C Sharp ile Programın Tek Sefer Açılması

1 – Yol  – System.Threading MUTEX 

Bu işlemi System.Threading namespace’indeki mutex sınıfı ile yapacağız ve Program.cs adlı dosyayı kullanacağız.

static void Main()
        {
            bool acikmi = false;
            Mutex mtex = new Mutex(true, "Program", out acikmi);
            if (acikmi)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new AnaForm());
            }
            else
            {
                MessageBox.Show("Program Zaten Açık","Uyarı",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
        }

Program başlangıç kodlarını kapsayan bir işlem ile istediğimizi elde etmiş olduk. Bu şekilde program zaten açıksa ikinci programı açmayacaktır.

Ayrıca System.Threading MUTEX‘in ikinci bir kullanım şekli daha vardır. Onu da verelim.

public static Mutex mutex = new Mutex(true,"değer"); 
// Buradaki değerin benzersiz olması gerekmektedir. 
// Aynı değere sahip birden fazla program olurması durumunda 
// Farklı programlar olsalar da çalışmazlar.

[STAThread]
static void Main()
{
  if(mutex.WaitOne(TimeSpan.Zero,true))
  {
    //Buraya Main() içindeki kodlar
  }
  else
  {
    MessageBox.Show("Program zaten çalışıyor.","Uyarı");
    Application.Exit();
  }
}

Programı kapattığınız her yere bu satırı da yazmanız gerekmektedir.

mutex.ReleaseMutex();

 

C sharp öğren

 

2 – Yol System.Diagnostics PROCESS

Bu yolda da farklı bir namespace ve sınıf kullanarak istediğimiz işi yapacağız.

using System.Diagnostics;
/* Namespace i ekliyoruz.*/

    private void FormAcilis_Load(object sender, EventArgs e)
    {
        Process AktifProgram = Process.GetCurrentProcess();
        /* Programımızın özelliklerini alabilmemiz için AktifProgram değişkenini tanımlıyoruz*/
        Process[] localByName = Process.GetProcessesByName("Programim");
        /* Çalışan Programlardan adı " Programim " olanların özellikleri localByName dizisine aktarılıyor.*/
        foreach (Process Prcs in localByName)
        {
            /* localByName dizisi içindeki değerler Prcs içine aktarılıyor.*/
            if (Prcs.Id.ToString() != AktifProgram.Id.ToString())
            {
                /* AktifProgram değişkenimize kendi programımızın özelliklerini almıştık. 
                 * AktifProgram.Id.ToString() ile programımızın çalıştığı anda işletim 
                 * sisteminin programa atadığı id yi alıyoruz. Sonra sırayla Programim olan
                 * uygulamalarınkiyle karşılaştırıyoruz.
                 *
                 * Örnek olarak; bizim programımız ilk 
                 * çalıştığında Id olarak 198690 aldı ise ikinci defa çalıştırılmak istenirse 
                 * 125631 alacaktır. != ifadesi ilede ikisinin farklı olması durumunda 
                 * programın ikinci defa çalıştırılmak istendiğini anlıyoruz. */
                MessageBox.Show("Program Bir Kez Çalıştırılabilir");
                /* Kullanıcıya uyarımızı gösteriyoruz. */
                Application.Exit();
                /* Programımızı kapatıyoruz. */
            
            }
        }
    }

 

Gördüğünüz gibi iki farklı namespace ile üç farklı yol var. System.Diagnostics PROCESS sınıfı ile daha farklı birçok yol çıkarabiliriz. Kendinize has yollar da bulabilirsiniz.


C Sharp ile Programın Tek Sefer Açılması , yazımız da bu kadar dostlar. Bu yazımızda üç farklı örnek verdik. Sizler bu örnekleri daha da çoğaltabilirsiniz.

Diğer derslerimizde görüşmek üzere…

C Sharp Eğitim Seti ve ERP Programlama ders listesi için tıklayınız. 

Takipte ve Sağlıcakla kalın. ?

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)