Makale Özeti

Windows uygulama geliştiricileri için componentin yeri ayrıdır. Günlerce emek sarfederek geliştirdiğimiz componentleri nasıl lisanslarız? Bu makalemde Lisanslama yöntemleri, Component Lisanslama ve .Net içerisinde lisanslama üzerine değineceğim.

Makale

Component Lisanslama

 

Windows uygulama geliştiricileri için componentin yeri ayrıdır. Günlerce emek sarfederek geliştirdiğimiz  componentleri nasıl lisanslarız?

Bu makalemde Lisanslama yöntemleri, Component Lisanslama ve .Net içerisinde lisanslama üzerine değineceğim.

 

 

Lisanslama Yöntemleri

 

            Eğer ticari bir yazılım geliştiriyorsak ve işin içerisinde lisanslama da varsa insanlara bu lisansı hangi yöntemlerle vermeliyiz onu belirlememiz gerekir. Bu yöntemler Ücretsiz , Tek ödeme karşılığında, İşlemci başına, Hit başına, Tarih bazlı olabilir.

 

Ücretsiz lisanslama : Eğer geliştirmiş olduğunuz yazılımdan satış anlamında bir kazanç beklemiyorsanız  , yazılımınızı kullanacak olan kişiler yazılımınızı ücretsiz olarak kullanabilirler.

 

Tek ödeme karşılığında lisanslama : Yazılımınızı kullanacak olan kişiler yazılımınızı kullanmak için bir kere ödeme yapıyorlar ve onu kullanabiliyorlar. Bu yazılım lisanslama ile ilgili kullanılan en geleneksel yöntemdir. Örnek verecek olursak internet üzerinden ücretini ödeyerek indirilip kullanılan programlar.

 

İşlemci başına lisanslama : Yazılımınızı kullanacak olan kişiler yazılımı kullanacak işlemci başına ödeme yaparlar. 

 

Hit başına lisanslama : Bu yönteme en çok web sitelerinde rastlanır. Windows uygulamalarında nadir kullanılan bir yöntemdir. Ve ücretlendirme hit başınadır. Örneğin web sitelerindeki reklamlara tıklama sayısı. Her tıklama başına bir ücretlendirme yapılabilir.

 

Tarih bazlı lisanslama : Yazılımınızı kullanacak olan kişiler o yazılımı belirli tarih aralığında kullanabilirler. Bizim de yapacak olduğumuz örnek tarih bazlı olacaktır. Örneğin 30 günlük deneme sürümü olan programlar.

 

 

Component Lisanslama  Nedir?

 

            Lisanslama ilerleyen yazılım sektöründe çok önemli hale geldi. Makalemin konusu component lisanslama olduğu için lisanslama ile ilgili diğer bölümleri atlıyorum. Biliyorsunuz ki günümüzde component satarak para kazanan bir sürü şirket mevcut. Component lisanslama, yazılım geliştiricilere ortaya çıkarttıkları componentleri güvence altına alma imkanı sunar. Böylelikle başka bir yazılım geliştirici yazdığınız componenti kullanmaya çalıştığında component kendi kendini denetler ve lisansı geçerli ise çalışır. Aksi takdirde hata verir. Eğer yazdığınız bir component başkaları tarafından sizin izniniz olmadan kullanılmasın istiyorsanız componentinizi lisanslamanız iyi bir çözüm olacaktır.

Component kullanımı iki zamanda meydana gelir. Bunlardan birincisi design-time(tasarım zamanı) ve ikincisi de run-time(çalışma zamanı) dediğimiz zamanlardır. Peki bu zamanların componenti lisanslama ile ilgisi nedir?

Lisanslama mantığımızın şu yönde olması gerekir. Componentin her örneği oluşturulduğunda(initialize) component kendisinin lisansının olup olmadığına bakması ve lisans mevcut ise lisansın geçerli olup olmadığını da denetlemesi gerekir. Bu mantığı düşünecek olursak componentin örneği toolbox tan sürüklenip form üzerine bırakıldığı anda(yani desing-time) yada kod içerisinden programatik olarak  çalıştırıldığı anda(yani run-time)  oluşturulabilir. (Bir sınıfın örneği oluşturulduğunda o sınıfın contructor methodunun çalıştığını biliyoruz) Örneği oluşturulan component constructor methodunda kendisinin lisansının olup olmadığını denetleyecek ve buna göre çalışıp çalışmayacağı da belirlenecektir.

 

 

.Net içerisinde lisanslama

 

.Net içerisinde oluştuduğumuz bir componenti lisanslamak için System.ComponentModel namespace’ine ihtiyacımız var. Componentimizin lisansının geçerli olup olamdığını kontrol eden LicenseManager sınıfı , lisansımızı oluşturmak için License sınıfı ve  bu lisansı bize verecek olan LicenseProvider sınıfı da gerekli olacak. Şimdi bu sınıfları ayrı ayrı inceleyelim.

 

System.ComponentModel.License

Özellikleri

LicenseKey

Bu özellik sayesinde lisansa ait bir key(anahtar) oluşturulur. Component kullanılırken componente bir de bu anahtarı verilir ki daha sonradan geçerliliğini kontrol edilebilsin. Ve sadece okunabilir bir özelliktir. Daha soradan değer atama gibi bir durum sözkonusu değildir.

Metodları

Dispose

Bu method ile componentin bellekteki durumunu da yönetilir.

 

System.ComponentModel.LicenseProvider

Metodları

GetLicense

Bu method ile geriye bir lisans döndürülür. Bu methodun içerisinde geriye bir  lisans döndürülürken aynı zamanda o lisansın geçerli olup olmadığı da kontrol edilir. İstersek componentin run-time, istersek design-time da çalışmasını da belirlenebilir.

 

System.ComponentModel.LicenseManager

Metodları

Validate

Bu method ile  geriye bir lisans döndürülür. Eğer copmponent geçerli bir lisan provider ile sağlanan geçerli bir lisansa sahipse işlem başarıyla tamamlanır ve componentin lisanslama altyapısı sağlanmış olur.

 

LicenseManager’ın Validate methodunu kullanmamız için oluşturduğumuz componente System.ComponentModel.LicenseProvider attribute’unu eklememiz gerekir. İsterseniz bununla ilgili küçük bir textbox uygulaması yapalım.

 

1-      Yeni bir windows projesi başlatalım ve adına “LicensingComponentsDemo” adını verelim.

2-      Bu Solution’a bir ClassLibrary projesi ekleyelim ve adına “MyLicensedComponentLib“ adını verelim.

3-      İlk önce 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.

 

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

 

using System;

using System.Collections.Generic;

using System.Text;

 

 

Burada kontrolümü desing-time da yapıyorum. Kullanıcı run-time da bir hata almayacak. Ve diyorum ki: “eğer zaman 2008’den küçük ise ve component design-time da kullanılıyorsa bu işlem için yeni bir lisans geriye döndür, diğer durumlarda ise geriye null değer döndür”. Eğer geriye null değeri dönerse design-time da hata oluşacaktır. Ve 2008’den sonra bu component design-time zamanında kullanılamayacaktır. Geriye döndürdüğüm lisans ise benim System.ComponentModel.License sınıfından türettiğim MyLicence sınıfı olacaktır.

 

5-       MyLicensedComponentLib projesine System.Windows.Forms dll’ini referans olarak ekleyelim.

6-      Daha sonra MyLicensedComponentLib MyTBox adında bir sınıf ekleyelim ve bu sınıfı System.Windows.Forms.TextBox sınıfından türetelim. Ve ağaşıdaki kodu yazalım.

 

using System;

using System.Collections.Generic;

using System.Text;

using System.Windows.Forms;

 

 

      Görmüş oldunuz gibi basit bir TextBox oluşturduk. İlk önce TextBox’ın constructorında çalışacak olan validate methodunu kullanabilmemiz için gerekli olan System.ComponentModel.LicenseProvider attribute’unu ekledik. Ve TextBox’ın constructor methodunda lisansın geçerli olup olmadığını kontrol ettik(validate methodu ile).

 

7-      MyLİcensedComponentLib projesini derlediğimizde artık .../bin/debug klasörü altında MyLİcensedComponentLib adında bir dll oluşacak.

8-      Bu dll’i LicensingComponentsDemo Projesine referans olarak eklediğimde toolbox ta MyLicensedComponentLib sekmesinin altında myTBox kontrolünün yer aldığını göreceksiniz.

 

 

 

9-      MyTBox konrolünü formun üzerine sürükleyip bırakalım. Solution explorer içerisinde bulunan properties bölümünün altında licenses.licx adında bir dosyanın oluşturulduğunu göreceksiniz.

 

 

10-   Licenses.licx dosyasının içerisi aşağıdaki gibidir. İsterseni MyLİcense sınıfı içerisindeki LicenseKey propertisinden geriye bir lisans anahtarı döndürebilir ve bu dosya içerisinde saklayabilirsiniz. Biz tarih bazlı çalıştığımızdan bu bölümü uygulamayacağız.

 

 

11-   Projemize 3 MyTBox daha ekleyelim.

 

 

12-   Şimdi uygulamamızı F5 e basarak çalıştıralım ve yazdığımız lisanslanmış MyTBox adınaki componentin çalıştığını görelim.

 

 

13-   Birde lisansın geçersiz olduğu durumu yaratalım.  Bilgisayarın tarihini 2009 yılına alalım ve MyTBox componentini design-time da formumuzun üzerine sürükleyip bırakalım. Aşağıdaki hata ile karşılaşıcaz.

 

 

Bilgisayarın tarihini 2009 yılına alınca bu lisansın geçersiz olduğunu görmüş olduk.  Tabiki bu geçersizlik formu tasarlarken(design-time) görülür. Fakat program çalışma esnasında 2009 yılına alınırsa bu hata ile karşılaşılmaz.

Özet :

            Bu makalemde lisanslama yöntemlerinden, component lisanslamadan ve .net içerisinde kendi componentimizi nasıl lisanslayacağımız konularına değindik. .Net içerisinde oluşturduğumuz componentleri  lisanslarken System.ComponentModel namespace’ina ihtiyacımız olduğundan ve License, LicenseProvider ve LicenseManager sınıflarını kullanmamız gerektiğini öğrendik.

 

                Sizlere bol lisanslı günler...