Yakın zamanda bu işi yaptığını öğrendiğim; bedava bir program olan Unlocker adlı programın kullandığı özellik lazım oldu...
Programın özelliği şu : windows'un veya diğer uygulamaların kullanmak üzere açıp da dışarıdan müdahele edilmesini istemedikleri için kilitledikleri dosyaların kilidini kaldırmak ve erişilebilir hale getirmek...
Benim isteğim şu... Uygulamam üzerinde açıp kullandığım ama henüz ".free" etmediğim için kilitli olan dosyaların kilidini isteğim zaman açmak istiyorum. bunun için bildiğiniz bi yöntem var mı... KOLAY GELSİN
Uygulamanın veya Dosyanın üzerindeki kilidi açmak...
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- Yanlış hatırlamıyorsam, bahsettiğim program çalışan kilitli tutan yani kullanan projeyi sonladırıp öyle kaldırıyordu. Senin istediğin ise başka bir şey. Yoksa kendi programının ipini çekersin olur biter..
- Şaka bir yana, açtığın dosyalar hakkında bilgi verirsen daha kolay cevap verebiliriz.
- Yani projen ile dahili bir açma kullanma yapıyorsun yoksa, harici bir programı parametrelerle açıp bir dosyayı yönlendirip onu mu yönetiyorsun vs.
- Örneğin projende bir procedure içerisinde bir FileStream açmışsan onu herhangi bir procedure içinde kapatman gerekirse ya erişim için global ya da bazı fonksiyonlar ile bulunabilir olması lazım. Bir de projenin stabilitesini etkilememesi için her seferinde If Assigned(hjhk) gibi kontroller zinciri lazım.


- Şaka bir yana, açtığın dosyalar hakkında bilgi verirsen daha kolay cevap verebiliriz.
- Yani projen ile dahili bir açma kullanma yapıyorsun yoksa, harici bir programı parametrelerle açıp bir dosyayı yönlendirip onu mu yönetiyorsun vs.
- Örneğin projende bir procedure içerisinde bir FileStream açmışsan onu herhangi bir procedure içinde kapatman gerekirse ya erişim için global ya da bazı fonksiyonlar ile bulunabilir olması lazım. Bir de projenin stabilitesini etkilememesi için her seferinde If Assigned(hjhk) gibi kontroller zinciri lazım.
@mrmarman ilgine teşekkür ederim.
Önce düzeltme yapmam lazım ki... Kilit Açma işine yarayan bu program'ın 2.ci işlevi ; eğer program dosya üzerindeki kilidi kaldırılamaz ise sonlandırma yapmak üzerine...
Esas işlevi Windows veya diğer uygulamalarca Erişimine İzin verilmeyen dosyalara ait erişim kilidini kaldırması...
Olay şu ki...
Unlocker Öncesi MSDOS Komut Penceresi Görüntüsü...
Unlocker Sonrası MSDOS penceresi görünümü :
Yani programın yaptığı şu : Dosyalara erişimi olan programla arasındaki bağlantıyı kopartıyor ve erişim izni otomatik olarak alınmış oluyor...
Benim programlarımda da mesela DB.MDB dosyasına sürekli bağlı olduğu halde yedek aldırmak isteğim üzerine doğal olarak sorunla karşılaşıyorum... ve bu sorunu aşabilmem için de programı sonlandırmaya veya tabloyu free etmeye pek niyetli diilim açıkçası...
YARDIMLARINIZ İÇİN ŞİMDİDEN TEŞEKKÜR EDERİM
Önce düzeltme yapmam lazım ki... Kilit Açma işine yarayan bu program'ın 2.ci işlevi ; eğer program dosya üzerindeki kilidi kaldırılamaz ise sonlandırma yapmak üzerine...
Esas işlevi Windows veya diğer uygulamalarca Erişimine İzin verilmeyen dosyalara ait erişim kilidini kaldırması...
Olay şu ki...
Unlocker Öncesi MSDOS Komut Penceresi Görüntüsü...
Kod: Tümünü seç
C:\Documents and Settings\User\Local Settings\Temp>del *.*
C:\Documents and Settings\User\Local Settings\Temp\*.*, Emin misiniz (E/H)? e
C:\Documents and Settings\User\Local Settings\Temp\fb_1816.lck
Dosya başka bir işlem tarafından kullanıldığından bu işlem dosyaya erişemiyor.
C:\Documents and Settings\User\Local Settings\Temp\Perflib_Perfdata_1018.dat
Dosya başka bir işlem tarafından kullanıldığından bu işlem dosyaya erişemiyor.
C:\Documents and Settings\User\Local Settings\Temp\Perflib_Perfdata_718.dat
Dosya başka bir işlem tarafından kullanıldığından bu işlem dosyaya erişemiyor.
C:\Documents and Settings\User\Local Settings\Temp\~DF2B4D.tmp
Erişim engellendi.
C:\Documents and Settings\User\Local Settings\Temp\~DFA9B3.tmp
Erişim engellendi.
C:\Documents and Settings\User\Local Settings\Temp\~DFB6E1.tmp
Erişim engellendi.
C:\Documents and Settings\User\Local Settings\Temp\~DFDBDD.tmp
Erişim engellendi.
C:\Documents and Settings\User\Local Settings\Temp\~DFEA63.tmp
Erişim engellendi.
C:\Documents and Settings\User\Local Settings\Temp\~DFEA78.tmp
Erişim engellendi.
Kod: Tümünü seç
C:\Documents and Settings\User\Local Settings\Temp>del *.*
C:\Documents and Settings\User\Local Settings\Temp\*.*, Emin misiniz (E/H)? e
Benim programlarımda da mesela DB.MDB dosyasına sürekli bağlı olduğu halde yedek aldırmak isteğim üzerine doğal olarak sorunla karşılaşıyorum... ve bu sorunu aşabilmem için de programı sonlandırmaya veya tabloyu free etmeye pek niyetli diilim açıkçası...

- Benim için yabacı bir konu ama Google amcadan senin için aradım ve bulduğum sonuçları paylaşayım.
- Ref : LockFile and LockFileEx Api Functions
- Buradaki kod ve örnek şunun üzerine... (test edilmemiş)
- İki adımda yapılan örnekteki işlemde, ilk adım olarak dosyanın ilk 1024 bytlık kısmı kilitliyormuş. Ondan sonraki adımda da akip eden ikinci 1024 bytelık kısmını. Sonra şöyle de eklemiş. Dilersen bir çırpıda 2048 byte kilitleyebilirsin ama durumu örnekli olarak açıklamak için böyle bir uygulama yapmış. Yani bir dosyanın dilediğin parçalarını kilitleme yeteneği varmış.
- Bir de LockFileEx varmış ki bu da benzeri bir işlemi a-senkron şekilde gerçekleştiriyormuş (asenkron kelime anlamını biliyoruz ama buradaki işlemde her ne demekse anlamadım).
- Ref : LockFile function?
- Yani kesinlikle ve kesinlikle veritabanı için kullanmayın diyor... Benden bu kadar. Araştırma başlangıç noktan olsun diye yazdım bunları.. Çalışmalarında başarılar...
- Ref : LockFile and LockFileEx Api Functions
- Buradaki kod ve örnek şunun üzerine... (test edilmemiş)
- İki adımda yapılan örnekteki işlemde, ilk adım olarak dosyanın ilk 1024 bytlık kısmı kilitliyormuş. Ondan sonraki adımda da akip eden ikinci 1024 bytelık kısmını. Sonra şöyle de eklemiş. Dilersen bir çırpıda 2048 byte kilitleyebilirsin ama durumu örnekli olarak açıklamak için böyle bir uygulama yapmış. Yani bir dosyanın dilediğin parçalarını kilitleme yeteneği varmış.
- Bir de LockFileEx varmış ki bu da benzeri bir işlemi a-senkron şekilde gerçekleştiriyormuş (asenkron kelime anlamını biliyoruz ama buradaki işlemde her ne demekse anlamadım).
- Şimdi de veritabanı cephesindeki durumu ifade etmek için TeamB'den bir soru cevap ilişkisi...@Marcel van Brakel yazdı:Here's an example that locks the first two 1024 byte sections of a file
(not tested). For demonstrational purpose the code performs the locking
in two steps, first it locks the first 1024 bytes and then it locks the
second 1024 bytes. Of course you could combine this into a single call
to lock the first 2048 bytes but it serves to demonstrate that you can
lock multiple regions independently.
LockFileEx is the asynchronous version of LockFile and it's usage isKod: Tümünü seç
const Access = GENERIC_READ or GENERIC_WRITE; Share = FILE_SHARE_READ of FILE_SHARE_WRITE; Name = 'myfile.txt'; // must be > 1024 byte var F: THandle; begin // open a file with read/write access and allow other threads to // read/write as well (why else use locking in the first place) F := CreateFile(PChar(Name), Access, Share, nil, OPEN_EXISTING, 0, 0); if F <> INVALID_HANDLE_VALUE then try // lock first 1024 bytes of the file (0,0) to (1024,0) if LockFile(F, 0, 0, 1024, 0) then try if LockFile(F, 1024, 0, 1024, 0) then try .. use locked region (1024..2048) here .. .. use locked region (0..1024) here .. finally UnlockFile(F, 1024, 0, 1024, 0); end; .. use the locked region (0..1024) here .. finally // unlock the same region UnlockFile(F, 0, 0, 1024, 0); end; finally CloseHandle(F); end; end;
similar. Just apply what you already know about asynchronous file IO an
combine it with the example above...
- Ref : LockFile function?
@ Rick Rogers (TeamB) | Fenestra Technologies yazdı:> Any idea why locks are not described even at the DB
> record level in Delphi help?
Because LockFile is a low-level API file locking mechanism that you
would NEVER EVER use with databases, since locking is one of the
primary high-level functions of a database engine, with which
programmers should never interfere.
You can use all (or nearly all) of the routines described in the
Windows API help file, and none of these are described in the Delphi
help file. Delphi is very powerful, and gives you unfettered access to
the API, so to do lower-level things like this you will need to
familiarize yourself with both Delphi and the API.
- Yani kesinlikle ve kesinlikle veritabanı için kullanmayın diyor... Benden bu kadar. Araştırma başlangıç noktan olsun diye yazdım bunları.. Çalışmalarında başarılar...
bu iyiliği bu devirde baba oğluna yapmaz valla. Apilerle yapılabileceği hiç aklıma gelmemişti aslında... Hele dosyanın parti parti kilitlenebileceği hiiiiçç aklıma gelmezdi... Bilgi yeterli. ben de cevabımı aldım ama sonuca ulaşmış değilim... Eğer çözüm bulabilirsem sizinle paylaşacağım. @mrmarman accaayip teşekkür ediyorum. BAŞARILAR DİLERİM