Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ADO.NET/SQL
C / Sys Prog.
Genel
Mono ve .NET
Silverlight
XML / Web Serv.
X86 Assembly
C++ / C++.NET
J#.NET / Java
.NET 3.x
UML / Analiz
Yazılım Müh.
ASP.NET
C# / VC#/.NET
Mobil Prog.
PHP 5
YAZAR HAKKINDA
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ı
:
46862
Yorum Sayısı
:
11
yorum yaz
SİTE İÇİ ARAMA
Ü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.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
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.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Burak Selim Şenyurt
Bellek Yönetiminde Verimlilik için İpuçları (Rust Odaklı)
19.5.2025
Burak Selim Şenyurt
Rust ve Güvenli Bellek Yönetimi Hakkında
19.5.2025
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
C# / VC#/.NET
/
WMI ile Harddisk Seri Numarası Kontrolü
WMI ile Harddisk Seri Numarası Kontrolü
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
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
Musa Balta
/
üye hakkında
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
murat yılmaz
/
üye hakkında
TANIL ERGİN arkadaşım, formatlasanda bu seri numarası değişmez. volume serial ile karıştırmayalım.
TEM
12
2007
Mehmet Bülent YILDIZ
/
üye hakkında
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
E. TUFAN
/
üye hakkında
http:www.devmafia.comTutorial-C-Sharp-Deriving-Hdd-info-using-WMI
TEM
29
2005
hasan beyazduman
/
üye hakkında
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
hasan beyazduman
/
üye hakkında
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
Arden Agopyan
/
üye hakkında
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
Can Kayacan
/
üye hakkında
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
TANIL ERGİN
/
üye hakkında
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
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl