Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Arden Agopyan
Arden Agopyan
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
2 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: belirledigimiz belirlenen bilgileri bilgisini console detayli ekrana harddisk ilgili kontrol lisanslama numarasi object sinifiyla yazilim C# / VC#/.NET Arden Agopyan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 26.12.2004
Okunma Sayısı : 44840
Yorum Sayısı : 11     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 23.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 23.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 23.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 23.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
WMI ile Harddisk Seri Numarası Kontrolü
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Bu makalemizde bir console uygulaması ile harddisk’imizin marka / model, tip ve seri numarası (üretici tarafından belirlenen seri no) gibi bilgilerini nasıl elde edebileceğimizi görüp WMI (Windows Management Instrumentation) ve System.Management isim alanı ile tanışacağız. Giriş

Öncelikle harddisk’imizin marka/model, tip ve seri numarası gibi bilgileri öğrenmenin bize getireceklerinden kısaca bahsedelim.

Yazılım konusunda her geliştiricinin kafasını kurcalayan bir konudur lisanslama sorunu.
Bir yazılım yaratırken sadece kendi belirlediğimiz kişilerin bu yazılımı kullanabilmesini isteyebiliriz (örn: ticari uygulamalar).Bu nedenle zaman içerisinde çeşitli kontrol mekanizmaları ve yöntemleri geliştirilmiştir.Bunlardan bazılarına değinelim:

İlk yöntem “Activation” adı verilen ve sizin tarafınızdan belirlenen ve programa atanan bir kullanıcı numarasının internet üzerindeki bir sunucu tarafından kontrol edilmesi yöntemidir. Bu yöntem büyük yazılım şirketleri tarafından sıkça kullanılmaktadır. Kullanıcı numarası her açılışta kontrol ediliyorsa, kullanıcının programı kullanırken sürekli olarak internete bağlı kalması gibi bir zorunluluk vardır.Bu da bir dezavantaj olarak karşımıza çıkmaktadır. Ayrıca bu numarayı kontrol eden sunucunun da bir maliyeti vardır.

Diğer bir yöntem Harddisk Volume Serial Number denen numarayla yazılımı özdeşleştirmektir. Bu yöntem pek kullanışlı değildir, zira harddisk her format’landığında yeni bir numara yaratılmaktadır.

Bizim yazımızda inceleyeceğimiz konu, başka bir yöntem olan, yazılımımızı harddisk’in üretici tarafından belirlenen ve ürüne atanan seri numarası ile özdeşleştirme yöntemiyle ilgilidir. Bu şekilde yapılacak bir lisanslama ile yazılım sadece belirlenen/izin verilen sabitdisk ile çalışacaktır. Yazının ilerleyen bölümlerinde yaratacağımız proje ile edindiğimiz bilgileri bu şekilde kullanabiliriz.

Bu bilgiler tabiki sadece lisanslama alanında kullanılmaz, ileride bahsedeceğimiz WMI’ın sınıfları içerisinden benzer yöntemlerle sistemin her parçası hakkında bilgi edinmek mümkündür. Bu yüzden kullanım alanı sınırsızdır. Bu konuda yaratıcılık size kalmıştır.

WMI nedir? Açılımı Windows Management Instrumentation olan, Windows Yönetim Araçları/Yardımcıları olarak türkçeye çevrilen WMI, bir Windows işletim sistemi bileşenidir. Bu bileşen sistemdeki yönetim bilgilerine erişimi amaçlar, yönetim görevlerini yürütür, yürütmeye yardımcı olur. WMI, içerisinde Win32, Registry, System gibi sınıflar ve IIS, Active Directory, DNS provider gibi birçok sağlayıcı barındırır.

WMI sınıfları ve sağlayıcıları hakkında detaylı bilgiye

http://msdn.microsoft.com/library/en-us/wmisdk/wmi/wmi_reference.asp

adresinden erişebilirsiniz.

System.Management İsim Alanı

.NET Framework içerisindeki System isim alanlarından birisi olan System.Management, WMI yapısı içerisinde belirlenmiş sistem,sisteme bağlı olan aygıtlar ve uygulamalarla ilgili geniş bir yönetim bilgisine ve yönetim uygulamalarına erişimi sağlar.

System.Management içerisindeki sınıflarla sistemimizdeki bileşenlere erişip bunlar hakkında -sağlanan- her türlü bilgiyi sorgulayabiliriz. Bu yüzden projemizde harddisk bilgisine erişmek için bu isim alanından (Spesifik olarak Win32_DiskDrive sınıfından) yararlanacağız.

System.Management isim alanı ile ilgili detaylı bilgiye:

http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemmanagement.asp

adresinden erişebilirsiniz.

Örnek Program

Artık kodlamaya geçebiliriz. Yaratacağımız projede sadece bilgileri sistemden almakla ilgileneceğimiz için bir c# console uygulaması yaratarak işe başlıyoruz.

Bahsettiğimiz gibi projemizin önemli bir kısmı için System.Management isim alanını kullanacağız. Bu isim alanı varsayılan olarak Reference bölümüne eklenmediği için .NET Component’leri arasından biz ekleyelim.



Isim alanını kullanabilmek için de using direktiflerimiz arasına

using System.Management;

ifadesini ekleyelim.

Öncelikle, erişmek istediğimiz bilgiler model, tip (IDE/SCSI ) ve seri numarası olduğu için buna uygun, harddisk bilgilerinin tutulacağı bir sınıf hazırlayalım.

class hardDisk
{
      private object model = null;
      private object tip = null;
      private object seriNo = null;       public object Model
      {
            get
            {
                  return model;
            }
            set
            {
                  model = value;
            }
      }

      public object Tip
      {
            get
            {
                  return tip;
            }
            set
            {
                  tip = value;
            }
      }

       public object SeriNo
      {
            get
            {
                  return seriNo;
            }
            set
            {
                  seriNo = value;
            }
      }
}


Bu sınıfta private olarak tanımladığımız model,tip ve seriNo nesnelerine belirlediğimiz metotların içerisindeki get-set bloklarıyla eriştik.
Burada veri tipi olarak object kullanmamızın sebebi WMI sınıflarından gelen verilerin object tipinde olması ve bu verileri ekrana yazdıracağımız Console.Writeline() metodunun da object tipi almasıdır. Istersek bu verileri string olarak tanımlayıp ToString() metoduyla tür dönüşümü de yapabiliriz.

Şimdi sıra geldi asıl işlevi yapacak olan Main metodumuzu yazmaya. Metodumuz içerisinde öncelikle sistemimizdeki harddiskler için bir koleksiyon tanımlamalıyız. Bunu yapabilmek için:

using System.Collections;

direktifini direktiflerimiz arasına ekliyoruz. Boylece using direktifleri aşağıdaki gibi görünecektir.

using System;
using System.Collections;
using System.Management;


Artık Main metodu içerisinde koleksiyonumuzu tanımlayabiliriz:

ArrayList hddCollection = new ArrayList();

Bu bölümden sonra küçük bir sorunla karşı karşıya kalmaktayız : Sistemimizdeki harddisk’lerin bilgisine Win32_DiskDrive sınıfıyla erişilmektedir,fakat bu sınıf istediğimiz bilgi türlerinden sadece tip ve model değişkenlerini bize sağlamaktadır. Harddiskin seri numarasına ise Win32_PhysicalMedia sınıfıyla erişilebilmektedir. (Bu bilgileri sağlayan parametrelerin detaylı listesi için referanslar bölümündeki ilgili sınıfın adresine göz atabilirsiniz.)

Bu yüzden bu sınıfları kullanarak bu bilgileri sırayla sorgulayacağız.

Öncelikle gereken bilgilerin bir kısmını Win32_DiskDrive sınıfıyla sorgulayalım :

ManagementObjectSearcher
searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); foreach(ManagementObject disk in searcher.Get())
{
      hardDisk hdd = new hardDisk();
      hdd.Model = disk["Model"];
      hdd.Tip = disk["InterfaceType"];
      hddCollection.Add(hdd);
}


Bu kod ile ManagementObjectSearcher sınıfı yardımıyla taramamızı gerçekleştirecek nesneyi yarattık
Görüldüğü gibi basit bir SELECT ifadesiyle bir veri tabanını sorgular gibi WMI’da tanımlanmış Win32_DiskDrive bilgisini elde ettik. Daha sonra sistemdeki her harddisk için ManagementObjectSearcher’ın Get() metoduyla bilgileri alarak döngü içerisinde değişkenlerimize atadık ve her harddisk’i koleksiyonumuza ekledik.

Şimdi de geriye kalan seri numarası bilgisini Win32_PhysicalMedia sınıfıyla sorgulayarak daha önceden koleksiyonumuza kattığımız harddisklerin bilgilerine ekleyelim :

searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia"); int index = 0;
foreach(ManagementObject disk in searcher.Get())
{
      hardDisk hdd = (hardDisk)hddCollection[index];
      if (disk["SerialNumber"] == null) hdd.SeriNo = "Tanimsiz";
      else hdd.SeriNo = disk["SerialNumber"];
      ++index;
}


Yine basit bir SELECT ifadesiyle Win32_PhysicalMedia bilgisini elde ettik. Burada bir index değişkeni kullanmamızın sebebi daha önceden belirlediğimiz koleksiyon elemanlarına erişmektir. Döngü içerisinde bu elemanlara sıradan erişerek eksik olan SeriNo bilgisini (bilgi yoksa “Tanimsiz” ifadesini) ekledik ve böylece tüm istenilen bilgiler tamamlanmış oldu.

Artık son olarak bu bilgilerimizi ekrana yazdıracak bloğu yazacağız.

Console.WriteLine();
Console.WriteLine("Harddisk Info");
Console.WriteLine("-------------");
Console.WriteLine(); index = 1;
foreach(hardDisk hdd in hddCollection)
{
      Console.WriteLine("{0}. Harddisk",index);
      Console.WriteLine();
      Console.WriteLine("Model:\t\t" + hdd.Model);
      Console.WriteLine("Tip:\t\t" + hdd.Tip);
      Console.WriteLine("Seri No:\t" + hdd.SeriNo);
      Console.WriteLine();
      ++index;
}
Console.ReadLine();


Görüldüğü gibi koleksiyondaki her sınıf üyesi için bilgileri şekilli bir biçimde tek tek ekrana yazdırdık.



Son Olarak

Bu makalemizde öncelikle yazılım sektöründe lisanslamaya daha sonra da kısaca WMI’a değindik, sağladığı bilgi ve yöntemlere erişmek için gereken System.Management isim alanını inceledik ve harddisk’imizle ilgili bilgileri ekrana yazdıran bir console uygulamasını c# dilinde yazdık.
Dilerseniz aşağıdaki referansları kullanarak yazıdaki konularla ilgili detaylı bilgiye erişebilirsiniz. Bir başka yazıda görüşmek üzere.

Yazıda geçen örnek uygulamayı indirmek için tıklayınız.

Referanslar:

WMI : http://msdn.microsoft.com/library/en-us/wmisdk/wmi/wmi_reference.asp

System.Management İsim Alanı : http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemmanagement.asp

Win32_DiskDrive Sınıfı : http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_diskdrive.asp

Win32_PhysicalMedia Sınıfı : http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_physicalmedia.asp

NOT: Bu makalede yarattığımız programın esin kaynağı ve benzeri olan bir hdd seri no bulma programını http://www.codeproject.com/csharp/ adresinde bulabilirsiniz.

Makale:
WMI ile Harddisk Seri Numarası Kontrolü C#, Visual C# ve .NET Arden Agopyan
  • Yazılan Yorumlar
  • Yorum Yaz
TEM
26
2010
Mehmet Bülent Yıldız ın dediği gibi Bu Seri Numarası alma olayını VMI kullanmadan web form üzerinde nasıl gösterebiliriz. Gerçi cevap gelmez ama yinede soralım.
KAS
17
2009
TANIL ERGİN arkadaşım, formatlasanda bu seri numarası değişmez. volume serial ile karıştırmayalım.
TEM
12
2007
Umarım Cevap verirsiniz! Bunu Webde Nasıl kullanacagız. yani web sayfasına giren birisinin HDD seri numarasını nasıl öğrene biliriz. Activex ile olabilinecegi söyleniyor. karşımızdaki kullanıcınında bunu kabul ettigini farz edersek nasıl yapa biliriz.
ŞUB
13
2006
http:www.devmafia.comTutorial-C-Sharp-Deriving-Hdd-info-using-WMI
TEM
29
2005
makale güzel olmuş ama messale spu seri numarasını veya başka bir donanım aygıtının seri numarasını da aynı şekilde bulabiliyormuyuz
TEM
29
2005
makale güzel olmuş ama messale spu seri numarasını veya başka bir donanım aygıtının seri numarasını da aynı şekilde bulabiliyormuyuz
MAR
2
2005
Programin ekran goruntusu kendi bilgisayarimdandir. Program birkac bilgisayarda da denenmistir. Benimle email adresimden sorunun detaylariyle birlikte irtibata gecerseniz yardımcı olmaya çalışırım.
MAR
2
2005
Program calismiyor. Gerek benim yazdığım şekilde gerekse de sitedeki örnek uygulama bilgisayarımda dogru calismadi.Ne model ne seri nosu, hicbirsey gözükmüyor.
ARA
27
2004
format attıgımızda, bu serial # degismesi durumunda hazırlanan lisanslama sistemi goceceginden, son bir case olarak, UID olusturulmasında yarar vardır, boylelikle hdd # sorunlu calisirsa sistem bu yaratılan UID # ile lisanslama için gerekli >ID< yi kullanmis olur
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor