Mən tələsmirəm, sualıma ətraflı cavab almaq üçün gözləmək lazım gələcəyini də yəqin etmişdim :)
Keçək incə məqamlara: icrada olan faylın hansı proqram tərəfindən işlədildiyini və proqramın həmin faylı silməyəcəyini bilirəm, əmma: bilmək istəyirəm ki, proqramımız bu fayla rast gəldikdə nə edəcək. Sualımı ətraflı verim: silinəcək 100 *.srv faylı var, onun ikisi (ya da üçü) hansısa task tərəfindən icradadır. Proqramımız işə düşür, 60 *.srv faylını sildikdən sonra icrada olan *.srv faylına rast gəlir, bu zaman aşağıdakılardan hansı baş verəcəkdir?
A) proqram icrada olan *.srv faylını silmir və işini dayandırır (qovluqda hələ silinməli olan 40 *.srv faylı qalıb).
B) proqram icrada olan *.srv faylını silmir, onu silməyi buraxır və silinə bilən (yəni taskda icrada olmayan) *.srv fayllarını silir.
C) proqram icrada olan *.srv faylını silmir və sildiklərini də geri qaytarır.
Düşünürəm ki, böyük ehtimalla cavab A) variantı olacaq. Əgər düz fikirləşirəmsə, onda bu zaman II dəfə Button1.Click etməyə məcbur olacağıq, hətta bəlkə III, IV, V dəfə də... ;)
Sual: Elə etmək olarmı ki, B) bəndi baş versin?! Söz yox, task managerdən icradakı taskı söndürmək yaxşı fikirdir, bəs həmin taskı geri necə qaytaracam? Yəni necə etmək olar ki, proqram işin sonunda "C:\Windows\Notepad.exe" Click etsin?
Səbr edib, oxuduğunuza görə minnətdaram...
programı dəfə lazımi qovluğa atırsız hər dəfə özü silir faylları.yəni manual set up kimi bir şeydir.adi porttable programın set up-ını düzeldek next next eliyin sadece bir *.exe faylı lazimi dir-ə kopyalasın.Elave işdir.hazır 1 dəfə kopyaladız fso.ama düz dediyiniz tərəf bu formada sifariş gəlibsə sifarişçiyə filn faylı filan dir-ə atın sonra program işləyəcək demək düz çıxmaz.nəzərə alın ki 10 dəqiqəlik işin məhsuludur. :)
Bəli programı həmin dir-ə kopyalamamış opendialog kompanenti ilə dir-in adresini edit-ə ordan filelistbox kompanentinə mənimsətmək olar.
İnshallah tələsməsəz sabaha tam şəkildə yerləşdirərəm.
İcrada olan faylı əlbəttə ki silməyəcək.Bunun üçün srv faylını icra eliyən taskın adını bilməlisiz.məsələn notepad.exe kimi.Sonra da notepad.exe ni task managerden kill veririsiniz.
http://www.google.az/search?q=task+kill+in+delphi
nümunə kodlar burda var.
Əziyyətinə görə minnətdaram. Deməli, belə başa düşdüm ki, proqramı atırıq lazım olan qovluğa və Button1.Click edirik. Əgər düz başa düşdümsə, ortaya böyük bir əmma çıxır, belə ki, əgər proqramı lazım olan qovluğa atmaq gərəkliliyi varsa, onda proqram nəyimə lazımdır? Əlimlə də silə bilərəm də həmin faylları :)
Sualı bir balaca da dəqiq qoyum: Form1 içərisində Button1, Edit1 və Edit2 var. Edit1-in Textində hər hansı bir qovluğun kataloq yeri, Edit2-nin Textində isə, faylın tipi göstərilib, məsələn,
Edit1.Text:="C:/Filan1/Filan2" və Edit2:="*.srv".
Button1-ə basdıqda C diskinin içində olan Filan1 qovluğunun daxilindəki Filan2 qovluğunun içərisində olan bütün *.srv fayllarını silməlidir.
Təbii ki, bu zaman Edit1-in Textini zövqə görə dəyişə bilərəm, eləcə də, Edit2-nin Textini. Bu halda proqramı Filan2 qovluğuna atmaq məcburiyyətində qalmayacağam, düzdürmü? Eləcə də, proqrama Siz də hansısa köməkçi komponent ata bilərsiniz, bəlkə də mən bunu unutmuşam.
Məni çaşdıran suallardan biri də odur ki, proqram icrada olan faylı silə biləcəkmi, yoxsa həmin faylı buraxıb, digər *.srv fayllarını silməyə çalışacaq, yoxsa işini bitirmədən proqram dayanacaq?!
Səbr edib, cavabımı oxuduğunuza görə minnətdaram...
Deməli belə filtrləməyə baxmadım hər hansı bir qovluqdakı bütün faylları sildirmə:
forma 1 ədədFileListBox1 atırsan.(program bütün faylları siləcək qovluqları yox.Özüdə shift+delete xD)
[code]
var
i: Integer;
begin
for i:=0 to FileListBox1.Items.Count-1 do
DeleteFile(FileListBox1.Items[i]);
FileListBox1.Update;
end;
[/code]
Programın autostart hissəsi:
yəni bu kod 1 dəfə işə dü.sə program ƏS ilə birgə açılacaq taki msconfig dən false verənə qədər.
[code]
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.LazyWrite := false;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', False);
reg.WriteString(form1.Caption, Application.ExeName);
reg.CloseKey;
reg.free;
end;
[/code]
################################################
Bu kodla program arxa planda işləyəcək.yəni ancaq task managerdə project1.exe görsənəcək.
[code]
application.ShowMainForm:=false;
[/code]
Tray İcon adlı kompanentlə programı saatın yanına endirə bilərsən.rahatlıq üçün.Yəni istəyəndə double clicklə form görsənsin.Yuxarıdakı kod işə düşəndə form pəncərəsi görsənmir.Birdə program işlədiyi qovluqdakı faylları silir.Gərək program özu daima bu C:\Documents and Settings qovluqda qalsın
################################################
Yazıb axıra çıxarsan maraqlı program olacaq.Ugurlar :)
Cavab bir az qəliz oldu. Delphidən anlayışım o qədər də yüksək səviyyədə deyil, bunu nəzərə alın :) Öncə sadə sualıma cavab tapım, zəhmət olmasa, Button1-in Click prosedurunun kod hissəsini yazın, sonra autostart məsələsini dərk etməyə çalışaram. Təşəkkürlər...
belə eləmək olar ki program autostarta düşsün və icra olunacaq kodlar formun on creatine yazılsın. GUİ-ni rahatlaşdırmaq üçün programı cool traya da salmaq olar.və ya apllicationinfo hide verib arxa planda işlətmək olar.
Yazdığım kodları tapmasanız yazın köməklik eliyərəm
Micro Kartda olan faylları kökündən silmək
Delphi-də komponentlər palitrası mövzusuna dair material axtarıram
Delphi – Əsas ikonun dəyişdirilməsi