Makale Özeti

mponent(Bileşen) lisanslama makalemin birinci bölümünde component lisanslama konusuna giriş yapmış, MyTBox adında bir component oluşturmuş ve bu componenti tarih bazlı denetim ile lisanslamıştık. Bu bölümde ise registery bazlı denetim uygulayarak MyTBox componentini lisanslayacağız.

Makale

Component(Bileşen) Lisanslama - 2

 

Component(Bileşen) lisanslama makalemin birinci bölümünde component lisanslama konusuna giriş yapmış, MyTBox adında bir component oluşturmuş ve bu componenti tarih bazlı denetim ile lisanslamıştık. Bu bölümde ise registery bazlı denetim uygulayarak MyTBox componentini lisanslayacağız.

 

 

Registry Kullanarak Bileşen Lisanslama Mantığı

 

Bir component yazacağız(MyTBox). Kişiler bu componentin lisans numarasını almamışlarsa  kullanmaya çalıştıklarında aşağıdaki form karşılarına çıkacak. Çıkan formdaki ürün anahtarı kişinin bilgisayarındaki bazı donanımlara bakılarak oluşturulacak(Ben kişinin bilgisayarının işlemci numarasına bakarak oluşturacağım). Kişi bu numarayı bize gönderecek ve biz  de kişiye Lisans Numarası göndereceğiz. Kişi form üzerinde bulunan Lisans Anahtarı bölümüne göndermiş olduğumuz lisans numarasını girerek lisanslama işlemini yapacak. Ayrıca göndermiş olduğumuz lisans numarası kişinin bilgisayarının registry bölümünde  saklanacak.

 

 

 

Bilinmesi Gerekenler

 

Yukarıdaki  duruma bakacak olursak çözülmesi gereken iki bölüm var :

 

1-      İşlemci numarasın bakarak ürün anahtarı oluşturmak. Bunun için System.Management namespace (isim alanı)i ve System.Management.ManagementObjectSearcher sınıfına ihtiyacımız olacak.

 

System.Management(namespace)

Windows Management Instrumentation (WMI) altyapısında bulunan uygulamalar, donanımlar hakkında bilgi almamızı sağlar. Bilgisayar hakkında özel bilgiler için sorgulama  yapmamıza imkan sağlar. İçerisinde ise ManagementObjectSearcher ve ManagementQuery sınıflarından türetilmiş sınıfları içerir. ManagementEventWatcher sınıfı ile system içerisinde gerçekleşen olayları yakalayabiliriz.

 

System.Management.ManagentObjectSearcher(class)

Metodları

Get

Get metodu çağrıldığında ManagementObjectSearcher sınıfının yapıcısında belirtilen wmi querystring çalıştırılır ve ilgili kapsama ait sonuç seti döner. Bu sonuç setinin tipi ise ManagementObjectCollection’dır. Yani bir kolleksiyondur.  Proje içerisinde "Select * from Win32_Processor" wmi sorgusunu kullanacağız. Bu sorgu sonucunda işlemciye ait özellikler dönecektir.

 

System.Management.ManagentObject(class)

Özellikleri

Properties

WMI sorgusu sonucunda dönen sonuç seti içerisindeki sistem bilgilerinin detayına erişebilmemiz için kullanılan özelliktir. Proje içerisinde "ProcessorId" özelliğini kullanacağız.

 

2-      İkinci durum ise Lisans Numarası oluşturmak. Lisans numarasını kişinin bize göndermiş olduğu ürün numarasının bütün karakterlerini ascii koduna çevirerek oluşturacağız. Oluşturduğumuz lisans numarasını kişinin bilgisayarının registry bölümünde saklayacağız. Ve saklama işlemini yaparken Microsoft.Win32  namespace(isim alannı)ine ve Microsoft.Win32.RegistryKey sınıfına ihtyacımız olacak.

 

Microsoft.Win32(namespace)

Registry ile ilgili işlemleri yapabildiğimiz isim alanıdır.

 

Microsoft.Win32 .Registry(class)

Özellikleri

LocalMachine

Yerel makine ayarları hakkında bilgileri içerir. Bu özellik windows registry tabanlı  HKEY_LOCAL_MACHINE alanını okur.

 

CurrentUser

O anda bilgisayarı kullanan kullanıcının tercihleri ile ilgili bilgileri içerir ve windows registry tabanlı HKEY_CURRENT_USER alanını okur.

 

ClassesRoot

Döküman tiplerini ve bu tiplerle bağlantılı özelliklerin bilgilerini içerir ve windows registry tabanlı HKEY_CLASSES_ROOT alanını okur.

 

Users

Varsayılan kullanıcı hakkında bilgiler içerir. Bu özellik windows registry tabanlı HKEY_USERS alanını okur.

 

CurrentConfig

Kullanıcı bağımsız donanım ayarlarının bilgilerini içerir. Kullanıcıya özel değildir. Bu özellik windows registry tabanlı HKEY_CURRENT_CONFIG alanını okur.

 

DynDate

Dinamik data bilgisi içerir. Bu özellik windows registry tabanlı HKEY_DYN_DATA alanını okur.

 

PerformanceData

Yazılımların performansları ile ilgili bilgileri içerir. Bu özellik windows registry tabanlı HKEY_PERFORMANCE_DATE alanını okur.

 

Microsoft.Win32 .RegistryKey(class)

Metodları

OpenSubKey

Anahtar açar.

 

CreateSubKey

Yeni bir anahtar oluşturur. Eğer oluşturmak istediğiniz isimde bir anahtar varsa mevcut anahtarı açar.

 

SetValue

Değer atar.

 

Close

Anahtarı kapatır.

   

 

Artık System.Management, System.Management.MagementObjectSearcher, System.Management.ManagementObject  ve Mcrosoft.Win32, Mcrosoft.Win32.Registry, Mcrosoft.Win32.RegistryKey sınıfları hakkında bilgi sahibiyiz. Şimdi örneğimizi adım adım uygulayalım:

 

1-      Örnek bir önceki makalemde geçen MyTBox örneğinin gelişmiş hali olduğu için bir önceki makaleyi okuyup bu adımları uygulamanız sizin için daha faydalı olacaktır. İlk önce “LicensingComponentsDemo” adında bir windows projesi başlatalım.

2-      Daha sonra mevcut solution’a “MyLicensedComponentLib” adında bir class library projesi  ekleyelim.

3-      “MyLicensedComponentLib”  projesine bize Ürün anahtarı ve Lisans anahtarını sağlayacak “MyKeyGenerator” adlı  bir sınıf ekleyelim. Bu sınıf içerisinde System.Windows.Forms, Microsoft.Win32,System.Management isim alanlarını kullanacağım için bu isim alanlarını ilk önce referans olarak projemize ekliyoruz ve daha sonra using kullanarak sınıfımıza import ediyoruz.

 

 

4-      MyKeyGenerator sınıfına aşağıdaki kodu yazalım.

 

 

 

 

MyKeyGenerator sınıfı içerisine GetUngeneratedKey, GetGeneratedKey, GetRegKey ve SetRegKey metodları tanımladık.

 

·         GetUngeneratedKey metodu kulanıcı bilgisayarının işlemci numarasına bakar ve geriye işlemci numarasını döndürür.

 

·         GetGeneratedKey metdou dışarıdan bir değer alır ve aldığı bu değerin her karakterini ascii koduna çevirerek ascii kodlarından oluşan yeni bir değer oluşturur.

 

·         GetRegKey metodu registry’deki HKEY_LOCAL_MACHINE sekmesi altındaki Software bölümünün altında Programs adındaki anahtarın içerisindeki “regKey” değeri getirir.

 

·         SetRegKey metodu metodu registry’deki HKEY_LOCAL_MACHINE sekmesi altındaki Software bölümünün altında Programs adındaki anahtarın içerisindeki “regKey” değerine bir değer ekler. Eklediği değer,  ascii koduna çevrilen değer olacaktır.

 

5-      “MyLicensedComponentLİb” projesine “MyLicense” adında bir sınıf ekleyelim ve aşağıdaki kodları içerisine yazalım.

 

 

MyLicense sınıfını System.ComponentModel.License sınıfından türettik ve LicenseKey özelliğini override ederek geriye kendi lisansımızı döndürmüş olduk. Ben burda geriye bir lisans numarası döndürmüyorum. Lisan kontrolünü LicenseProvider içerisinde tarih bazlı lisanslama kullanarak yapıcam. Böylelikle kendi lisansımızı oluşturmuş olduk.

 

6-      MyLicensedComponentLib projesine “MyLicenseProvider” adında bir sınıf daha ekleyelim ve içerisinde aşağıdaki kodu yazalım.

 

Lisans sağlaıcı MyKeyGenerator sınıfının metodlarını kullanarak kullanının registry’sine yazılan değerin ürettiğimiz değerle aynı değer olup oladığını kontrol ediyoruz. Böylelikle lisans sağlayıcımızı da eklemiş oluyoruz.

 

7-      Birde kullanıcının kullanıcıya gönderdiğimiz lisans numarasını girmesi için bir form tasarlayacağız. Bu forma “KeyEntryForm” adını verelim ve aşağıdaki tasarımı yapalı ve forma ait kodları yazalım.

 

 

İki textbox ve bir button’a ihtiyacımız olacak. Ürün anahtarı bölümünde bulunan textbox’ın name özelliğini textbox2, readonly özelliğini true ve  Lisans anahtarı bölümünde bulunan textbox’ın name özelliğini textbox1 olarak ayarlayalım.

 

Form yüklendiğinde kullanıcının donanımına bakacağız ve bir numara üretip bunu textbox2 içerisinde göstereceğiz. Daha sonra kullanıcı textbox2 içerisindeki değeri bize yollayacak. Kullanıcının bize yolladığı değere göre bizde kullanıcıya bir lisans numarası göndereceğiz.(tabi bu lisans numarasını üretmek için küçük bir uygulama daha yazacağız.)  Kullanıcı göndermiş olduğumuz numarayı textbox1 içerisine girecek ve ürününü lisanslayacak.

 

8-      Formumuzu da tasarladıktan sonra geriye componentimizi yazmak kaldı. “MyLicensedComponentLib”  projesi içerisine MyTBox sınıfnı ekleyerek bu sınıfı TextBox sınıfından türetelim. Aşağıdaki kodları yazalım.

 

using System;

using System.Collections.Generic;

using System.Text;

using System.Windows.Forms;

 

using System.ComponentModel;

 

9-      Şu ana kadar MyKeyGenerator, MyLicense, MyLicenseProvider ve MyTBox sınıfını ekledik ve bu sınıfları yapılandırdık. Şimdi ise verilen Ürün numarasına göre Lisans Numarası oluşturan küçük bir uygulama yapalım.

10-   Yeni bir windows projesi başlatalım ve adını “MyKeyGeneratorApplication” olarak belirleyelim.

11-   Varsayılan olarak gelen Form1 formuna şu tasarımı yapalım.

 

12-   Generate Buttonunun click olayına aşağıdaki kodları yazalım.

 

 

13-   Bu uygulamayı derleyelim.

14-   Artık gerekli olan bütün işlemleri hazır hale getirmiş olduk. Sıra oluşturmuş olduğumuz componenti  kullanmaya geldi.

15-   İlk önce “LicensingComponentsDemo” adlı windows uygulamasına “MyLicensedComponentLib” dll’ni referans olarak ekleyelim.

 

16-   Formun üzerine araç kutusunun üzerinde bulunan MyLicensedComponentLib sekmesinin içerisinde beliren MyTBox componentini sürükleyip bırakalım. Bıraktığımız anda “Ürün lisanssızdır” mesajını göreceğiz.

 

Tamam buttonuna bastıktan sonra KeyEntryForm açılacak. Açılan KeyEntryForm üzerinde otomatik olarak beliren bir numara olduğunu göreceksiniz. Bu numara Ürün Anahtarıdır.

 

 

İşte componenti kullanacak olan kullanıcı bu ürün anahtarını bize gönderecek. Biz de MyKeyGeneratorApplication windows projesini kullanarak bu numaraya göre bir lisans numarası oluşturup kullanıcıya göndereceğiz.

 

17-   Şimdi MyKeyGeneratorApplication windows projesini açıp başlatalım. Ve kullanıcının bize gönderdiği numarayı buraya girip generate buttonuna basalım. Yeni bir lisans numarası oluşacaktır.

 

 

18-   Yeni bir lisan nuamrası oluştu. Bu numarayı Key EntryFormdaki Lisans Numarası bölümüne girerek componenti lisanslayalım.

 

 

 

Ürünüzmüz lisanslandı!!!

 

19-   Son ekranımızda lisanslanmış componentin form üzerinde durduğunu görüyoruz.

 

Sizelere bol lisanslı günler...