Fuction dosyayı Free etmiyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Fuction dosyayı Free etmiyor

Mesaj gönderen serbek_tr »

Daha önce version bilgilerine nasıl ulaşılabileceğine dair bir arama yaptırmıştım aramalar sonucunda işime yarayacak bir link buldum
ama burda bir terslik var terslik şu açıkçası kod açıklamalarında bir şey anlamadım sayfanın tamamı ingilizce idi.
iyi güzel çalışıyor sadece ben ufak bir değişiklik yaptım
ne yaptığımı kodların yanına yazdım
ama bu functionun bulunduğu çalışan exe kapanıncaya kadar funtionla çağrılan dosya kullanımda kalıyor bunu nasıl free edebilirim;

Kod: Tümünü seç

function getVersion(Filename:string) : string; 
// yukarıdaki satırın aslı şöyle --- function getVersion : string; 
// function u çağıdıgımda dosya adı ile çağırayım diye ekledim 

{ --------------------------------------------------------- 
   Extracts the FileVersion element of the VERSIONINFO 
   structure that Delphi maintains as part of a project's 
   options. 

   Results are returned as a standard string.  Failure 
   is reported as "". 

   Note that this implementation was derived from similar 
   code used by Delphi to validate ComCtl32.dll.  For 
   details, see COMCTRLS.PAS, line 3541. 
  -------------------------------------------------------- } 
const 
   NOVIDATA = ''; 

var 
  dwInfoSize,           // Size of VERSIONINFO structure 
  dwVerSize,            // Size of Version Info Data 
  dwWnd: DWORD;         // Handle for the size call. 
  FI: PVSFixedFileInfo; // Delphi structure; see WINDOWS.PAS 
  ptrVerBuf: Pointer;   // pointer to a version buffer 
  strFileName,          // Name of the file to check 
  strVersion : string;  // Holds parsed version number 
begin 

   strFileName := FileName; 
//bunuda orjinali böyledi galiba ---- strFileName := (0); 


   dwInfoSize := 
      getFileVersionInfoSize( pChar( strFileName ), dwWnd); 

   if ( dwInfoSize = 0 ) then 
      result := NOVIDATA 
   else 
   begin 

      getMem( ptrVerBuf, dwInfoSize ); 
      try 

         if getFileVersionInfo( pChar( strFileName ), 
            dwWnd, dwInfoSize, ptrVerBuf ) then 

            if verQueryValue( ptrVerBuf, '\', 
                              pointer(FI), dwVerSize ) then 

            strVersion := 
               format( '%d.%d.%d.%d', 
                       [ hiWord( FI.dwFileVersionMS ), 
                         loWord( FI.dwFileVersionMS ), 
                         hiWord( FI.dwFileVersionLS ), 
                         loWord( FI.dwFileVersionLS ) ] ); 

      finally 
        freeMem( ptrVerBuf ); 
      end; 
    end; 
  Result := strVersion; 

end;
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

ShowMessage(getVersion(Application.ExeName));
bu sekilde test ettim sorun yok fonksiyon sorunsuz calısıyor
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

SAyın hocam ben belki anlatamamış olabilirim sorunsuz çalışıyor ancak
ister bu şekilde getVersion(Application.ExeName); ister
getVersion('C:\xxx.exe'); fark etmez ama bu fonksiyonun kullanan exe kapanıncaya kadar fu funstion ile paramere olarak verilen dosya üzerinde işlem gerçekleşmiyor kullanımda diyor.
ayrıca ben bu fonksiyonu iki kere çalıştırıyorum 1. ci çalışan exe için 2. cisi ise bu çalışan dosyanın daha güncelinin bulabileceği server daki aynı isimli dosya için
Şöyle örnekliyeyim vatandaşın biri exe yi çalıştırdı diyelim bu vatandaş çalışırken bir başkasıda açacak programı çünkü bu program burda en az 35 kiş tarafından kullanılacak biri kapatsa diğeri kapatmayacak yani program gün boyu açık kalacak bu sırada ben bir güncelleme yaptım ve güncellediğim doyayı Serverdeki yere gönderemiyorum neden çünkü bu açık programlar ilgili yerdeki dosyayı sürekli kullanımda tutuyorlar yani server dakini dolayısı ile ben üzerine kopyalama yapamıyorum. işte sorun bu
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
bukentay
Üye
Mesajlar: 44
Kayıt: 16 Şub 2004 07:21

Mesaj gönderen bukentay »

bence sorununuz baska bi yerde ben bu fonksiyonla bi exenin versiyonuna baktim ve program acikken o exeyi sildim bi sorun cikmadi.anlatiminizdan tam bi sey cikaramadim ama siz kendi exenizi calisirken silmeye ugrasio olmayasiniz?
serbek_tr yazdı:SAyın hocam ben belki anlatamamış olabilirim sorunsuz çalışıyor ancak
ister bu şekilde getVersion(Application.ExeName); ister
getVersion('C:\xxx.exe'); fark etmez ama bu fonksiyonun kullanan exe kapanıncaya kadar fu funstion ile paramere olarak verilen dosya üzerinde işlem gerçekleşmiyor kullanımda diyor.
ayrıca ben bu fonksiyonu iki kere çalıştırıyorum 1. ci çalışan exe için 2. cisi ise bu çalışan dosyanın daha güncelinin bulabileceği server daki aynı isimli dosya için
Şöyle örnekliyeyim vatandaşın biri exe yi çalıştırdı diyelim bu vatandaş çalışırken bir başkasıda açacak programı çünkü bu program burda en az 35 kiş tarafından kullanılacak biri kapatsa diğeri kapatmayacak yani program gün boyu açık kalacak bu sırada ben bir güncelleme yaptım ve güncellediğim doyayı Serverdeki yere gönderemiyorum neden çünkü bu açık programlar ilgili yerdeki dosyayı sürekli kullanımda tutuyorlar yani server dakini dolayısı ile ben üzerine kopyalama yapamıyorum. işte sorun bu
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Sayın Hocam uzatmadan kısa ve yazayım bu arada cevapta geciktiğim özür dilerim ilgisizlikten değil nete işyerinden giriyorumda hafta sonu off um.

Ben C:\A.exe dosyasını çalıştırıyorum bu dosya yine c:\a.exe dosyasını yani kendi versiyon bilgisini alıyor. aynı anda F:\A.exe dosyasınında versiyon bilgisini alıyor ben bu F:\A.exe dosyasını silemiyorum kullanımda diyor. yani kendi çalışan dosyamı zaten silemem . Acaba bu novell sistemden kaynaklanıyor olabilirmi yani F:\a.exe yi silememem
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

serbek_tr yazdı:Sayın Hocam uzatmadan kısa ve yazayım bu arada cevapta geciktiğim özür dilerim ilgisizlikten değil nete işyerinden giriyorumda hafta sonu off um.

Ben C:\A.exe dosyasını çalıştırıyorum bu dosya yine c:\a.exe dosyasını yani kendi versiyon bilgisini alıyor. aynı anda F:\A.exe dosyasınında versiyon bilgisini alıyor ben bu F:\A.exe dosyasını silemiyorum kullanımda diyor. yani kendi çalışan dosyamı zaten silemem . Acaba bu novell sistemden kaynaklanıyor olabilirmi yani F:\a.exe yi silememem
ee yani kendi bindiğin dalı kesemezsin dimi :) novelle alaka yok . programına ayrı bi startup exesi yükle. o program güncellemeleri yapsın. sonra esas oğlan programı açsın vb..
.-.-.-.-.-.-.-. ^_^
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Yaw arkadaşlarım ben anlatamıyormum bilmemki ben zaten bindiğim dalı kemiyorumki bir daha farklı bir şekilde anlatmama müsade edin
şimdi C:\A.exe dosyasını çalıştırdım bu dosya açıldı ve ilk açıldığında önce kendi versiyon bilgisini okudu sonra F:\A.exe dosyasının versiyon bilgisini okudu eğer bunlar farklıysa program kendini sonlandırıyor ve c:\update.exe yi çalıştırıyor bu update dosyasıda F:\a.exe C:\ ye kopyalıyor bunda bir sorun yok ancak versiyon bilgileri aynı ise program update çalıştırmıyor kendi normal çalışmasına devam ediyor. ve birkere bu kontroller için yukarıda fonksiyon hem c:\a.exe dosyası için hemde f:\a.exe dosyası için birer kere çalıştırılıyor. ancak ben program üzerinde bir değişiklik yaptım ve versiyonu yeniledim yenilemiş olduğum dosya d:\program\a.exe dosyasını f:\ye a.exe olarak kopyalamak istediğimde dosya kullanımda diyor. daha açık anlatamam arkadaşlar neden kullanımda bu a.exe yi 30 yakın adam kendi c:\ sinden çalıştırıyor ve hepside f:\a.exe versiyonunu başlangıçta kontrol için fonksiyonla çağırıyor
ve ben bu yüzden f:\ kopyalama yapamıyorum arkadaşlar yani okadar da bilinçsiz biri değilim herkese çalıştığı programı kapattırınca kopylama gerçekleşiyor bundan daha kesin bir sonuç varmı kullanımda işte

eh İnşallah bu defa anlatabildim
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

arkadasım simdi dediklerini win2000 server uzerinde full paylasımlı bir klasor uzerinde denedim hic bir sorun yok
bence sen baska bir islem neticesinde bu dosyayı kullanıyorsun o yuzden kopyalamaya izin vermiyor.
bunu test etmenin en basit yolu sade bir exe olustur, sadece versiyon bilgisini showmessage ile gostersin
birde bu sekilde dene bakalım
versiyon bilgisini ogrendikten sonra (serverda ki dosyayı) dosyayı silmeye yada uzerine yazmaya calıs bi problem cıkacak mı?
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

tamam hocam şimdi deneyip haber edeceğim ancak bu version bilgisini alan program açıkken silmeye çalışacağım bakalım açık program silemeye engel teşkil ediyormu mutlaka var bunda bieşy ya ben bir noktayı atlıyorum yada bilmiyorum hayırlısı bakalım
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

hocam kesin sonucu bildiriyorum sizlere

Novell 1 ,Serbek_tr 0 maç bitmiştir.

Gkimirti aynen dediğiniz yaptım kontrol dosyası c:\a.exe dosyasını kontrol ederken sildim sorun yok ama aynı kontrol dosyası f:\a.exe dosyasını kontrol ederken silemedim buda gösteriyorki sorun novell
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Ve ayrıca belirtmek isterimki şu kullanılan novel bir de şöyle birşey yapıyor onuda anladım dosya kullanımda değilse va aynı isimden oraya kopyalama yapıyorsan no problem kopyalamak istediğin dosya adı kullanılıyorsa sana önderide bulunuyor mesela a.exe yi a1.exe olarak öneriyor
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Cevapla