Kopyalanmış Uygulamanın Başka Bilgisayarda Çalışmasını Nasıl Engelleriz?

23/11/2015, 22:51

mehami

Değerli hocalarım diyelim ki uygulamayı yaptık,lisanslama işlemleri vs vs herşey bitti..accde ya da mde yaptık..Programı müşteriye verdik..Buraya kadar sıkıntı yok..

Müşteri almış olduğu uygulamamızı kendi bilgisayarında sorunsuz kullanıyor olsun,arkadaşı ya da arkadaşları ile koplayama şekliyle paylaşmasını engellemek için lisanslama dışında (neden derseniz lisanslama örneğinde nedense bazı bilgisayarlarda lisans sorarken bazılarında sormadan açıyordu) farklı bir yol aradım..

Aşağıdaki gibi bir kod buldum..Lakin nerede nasıl kullanacağımı beceremedim..

Kodun mantığı şu;her kullanıcının bilgisayar adı farklıdır..Bilgisayar adını alıp-açılış formumuzda ya da diğer formların açıldığında olay yordamında kod içine gömüyor..Bilgisayar adı kontrolü buradan yapılıyor..yani tabloya yazmak yok,formda kod içinde yazılıyor..Uygulama kodlarını şifrelediğimiz için kodları müşteri göremiyor ve bilgisayar adı değiştirilemiyor..

Doğal olarak bilgisayar adı "Alinin Bilgisayarı" ise bu formda koda yazılıyor ve uygulama örneğimiz farklı bilgisayara kopyalansa bile bilgisayar adı buradaki ile eşleşmeyeceğinden uygulamamız yeni bilgisayarda çalışmayacaktır.

Bu kodu nasıl kullanmamız gerekmekte lütfen bir yol gösterin..İşte kod;

Option Compare Database
Private Declare PtrSafe Function BakComputerAdi Lib "kernel32" Alias
"GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Sub Form_Open(Cancel As Integer)
'******* Giris formu acilisina bilgisayar adini kontrol ettirilebilir *******
if PcMakine <> "m_çakıcı makinesi" then Application.Quit acQuitSaveAll
End Sub
Function PcMakine() As String
Dim Genis As Long, Gosteri As Long, MakBul As String
MakBul = String$(254, 0)
Genis = 255
Gosteri = BakComputerAdi(MakBul, Genis)
If (Gosteri > 0) Then
PcMakine = Left$(MakBul, Genis)
Else
PcMakine = vbNullString
End If
End Function
24/11/2015, 20:13

atoz112

Sayın mehami,

Bahsettiğiniz talebiniz doğrultusunda yazmış olduğunuz kod satırlarına yönelik olarak atladığınızı düşündüğüm bir hususa dikkat çekmek isterim.

Kod:
if PcMakine <> "m_çakıcı makinesi" then

fonksiyon içerisinde yer alan yukarıdaki kod satırı ile eğer bu bilgisayar adı ile eşleştirme yapacak olursanız;SADECE bu isimli bilgisayar adına göre kıyaslamış oluyorsunuz ve doğal olarak da diğer bilgisayarlarda uygulamanızı kullanacak olan sizin tabiriniz ile “müşteri” bu uygulamayı kullanamayacaktır.

Çünkü;bu kod ile ancak bu yazdığınız isme uygun olursa çalıştırabilecektir.Eğer kendi bilgisayarınızın dışında başka bir bilgisayarda kullanımını engellemek istiyorsanız ister bu şekilde ister bu kendi bilgisayar adınızı bir tabloya kaydedip bu verileri yine eşleştirme ile karşılaştırıp kontrol neticesinde farklılık varsa kullanımını engelleyebilirsiniz elbet.zaten,bu kod ile bu sağlanacaktır.

niyetiniz (son konularınızda anlaşıldığı üzere,sanırım sizin kendi bilgisayarınızda lisans işlemini yapıp aynı lisanslı uygulamayı işyerinizde denediğinizde lisans sormaksızın açılması sorununuzdan dolayı olsa gerek);uygulamanızın lisans sormaya yönelik eğer bilgisayar adına göre farklılık içerdiğinde bu lisans sorma işleminin devreye girmesi ise,o zaman;yukarıda bahsi geçtiği üzere,önce bir tabloda kendi bilgisayarınızın adını barındırırsınız ve akabinde yazdığınız kod ile de eğer (ki,zaten bu sonuç olacaktır) isimlerde farklılık varsa kontroller neticesinde direkt lisans sorması sağlatılabilir.açıklandığı üzere,bu sadece;sizinle işyerinizdeki bilgisayar arasındaki farklılık durumuna göre değerlendirebileceğiniz bir işlem olmaktan öteye geçmeyecektir.

ancak,bu hali ile eğer müşterilere yönelik uygulamak isterseniz,geçerli değildir.çünkü;nedeni,sizin kendi bilgisayar adınıza göre bir kontrol durumunun olmasının anlamsız olmasıdır.direkt müşterinin bilgisayar adını alıp bu hali ile kontrol ettirmenizin de katkısı veya anlamı olmayacaktır.

fakat,lisans koduna göre eğer lisans formunun açılması öncesinde direkt kişiden ya da sizin uygulama arkasından edineceğiniz verilerin kontrol işlemleri neticesinde bir işlem oluşturmak istiyorsanız,o zaman daha farklı durumlar söz konusudur.

Ayrıca,sanırım son konularınızda lisans kontrollerini volume serial numarası üzerine işlem yapıyordunuz.volume serial no yerine hard diskin fiziksel seri numarası üzerinden kontrol yaptırmakta fayda olur.çünkü;diğerinin,özellikle üçüncü parti yazılımlar ile değiştirilebilir olduğunu da belirtmekte fayda var.bundan dolayı da fabrika çıkışlı orijinal serial numarasını aratıp tedarik etmek yerinde olacaktır.

Eğer daha güçlü bir serial kontrolü ya da lisans kontrolü yapılacaksa;farklı kombinasyonları birleştirip de yapmak da mümkün.mac adres bilgisi,serial ya da bilgisayar adı v.s…gibi.elde edilecek değerlerin encrypt  (şifrele) / decrypt (çöz) işlemi ile de değerler farklı sonuçlara getirilip sonra değiştirilebilir veya yeni değerler elde edilebilir gibi…farklı alternatif yöntemler söz konusudur.bilginize…iyi çalışmalar,saygılar.
25/11/2015, 00:02

mehami

Değerli atoz hocam ve değerli adminler;
İlginize çok tşk ederim..

Uygulamada bir modül oluşturup içine şu kodu yapıştırıyoruz;
Option Compare Database
Private Declare PtrSafe Function BakComputerAdi Lib "kernel32" Alias
"GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Function PcMakine() As String
Dim Genis As Long, Gosteri As Long, MakBul As String
   MakBul = String$(254, 0)
   Genis = 255
   Gosteri = BakComputerAdi(MakBul, Genis)
   If (Gosteri > 0) Then
       PcMakine = Left$(MakBul, Genis)
   Else
       PcMakine = vbNullString
   End If
End Function
---------------------------------------------

Daha sonra ilk açılacak formun açıldığı olay yordamına da şu kodu yapıştırıyoruz;

Private Sub Form_Open(Cancel As Integer)
if PcMakine <> "Pc_Mehami" then Application.Quit acQuitSaveAll
End Sub


-------------------------------------------
Şimdi bilgisayar adı ile ilk açılan formda kod içinde yazılı bilgisayar adı aynı ise yani eşit ise anamenu formunu açsın istiyorum,değilse uyarı formunu açsın istiyorum..

Bunun için kodda nasıl bir değişiklik yapmam gerekmektedir??
Öneri ve yardımlarınızı bekliyor saygılar sunuyorum..
25/11/2015, 01:38

ozanakkaya

Private Sub Form_Open(Cancel As Integer)
if PcMakine <> "Pc_Mehami" then
Docmd.openform "uyariformu",acnormal,"","",,acnormal
else
Docmd.openform "anamenu",acnormal,"","",,acnormal
end if
End Sub
25/11/2015, 02:19

mehami

Çok tşk ederim atoz hocam ve ozan hocam..
Konu çözülmüştür-taşınabilir

Saygılarımla