Bir Proje Grubu Oluşturalım

1
Exe dosyasını detaylarıyla oluşturan bölüm.

2
İşini hızlı btitirmek isteyenler için fazla detayı olmayan basit sihirbaz.

3
Geliştiricilere geri bildirim göndermeye yarıyor.

4
İnternete yükleyeceğimiz basit bir kılavuz.

6
Geçmişte açılan dosyalar

7
Oraya ne koyacağıma karar veremedim.

NOT: Programın adını o an salladım. Onu değiştiririz.

Programın amacını ve neden kapalı kaynak kodlu olması gerektiğini anlamadım. Algoritmayı da biraz daha açarsanız daha iyi olur.

Aklımda bir proje var bakalım beraber

@Tolgahan_Sarp bakalım hocam.

Amaç: İnsanların bazı bilgisayar programlarını sürekli yanlarında taşıması gerekir. Nerede olursa olsun çalışan programlara portable programlar denir. Ve programın portable versiyonu bazen yapımcı tarafından yayınlanır, ancak buna az rastlanır. Projemiz, her programın portable halini çıkarmaya yarayacak.

Algoritma: Programımız kullanıcıdan portable olmasını istediği programın klasörünü, ve o programı çalıştırmaya yarayacak olan exe dosyasının adını isteyecek. Kullanıcıdan alınan dizini zipleyip onu base64 ile şifreleyecek, ve şifrelenmiş zip dosyası ile exe dosyasının adını sunucuya gönderecek. Sunucu, şifrelenmiş zip dosyasının şifresini çözüp onu çıkarttıktan sonra içindeki programı çalıştıran kodları .exe haline getirip linkini tekrar bizim programımıza gönderecek. Bizim programımız o exe dosyasını indirip kullanıcıya teslim edecek.

Ama internette Windows kullanan sunucu hizmeti var mıdır bilmiyorum.

Portable dan kastınız ne? Farklı platformlarda çalışabilir dosya mı?

Bu iş için neden sunucuya ihtiyacımız var? Bilgisayar üzerinde halledilemez mi?(Eğer asıl işi sunucu yapıyorsa programa neden ihtiyacımız var? Tamamen site üzerinde çalışsa olmaz mı?)

Hayır. Bilgisayarınıza kurulu olan programı tek dosya haline getirerek başka bilgisayarlarda da çalışmasına olanak sağlamak.

Pyinstaller ile olmuyor. cx_freeze olabilir onu araştıracağım.

Başka bilgisayarlarda çalışmasından kastınız nedir? Örneğin Windows’ta çalışan bir programı Linux’da da çalıştırmak mı? Ya da sadece Windows üzerinde çalışan programları diğer Windows sürümlerindede mi çalıştırmak istiyorsunuz? Sanırım ikinci dediğimi yapmak istiyorsunuz.

O zaman bakmamız gereken birkaç parametre var. Mesela bir tanesi, programın bağımlı olduğu kütüphaneler. Sizin tek paket haline getirmek istediğiniz program Windows’un yeni bir sürümündeki kütüphaneye ihtiyaç duyarsa, eski sistemlerde nasıl çalıştırmayı düşünüyorsunuz?
Ya da kütüphaneler varsa bile, sürümü geçtiği için veya artık tavsiye edilmediği için, programın kullanılması sırasında güvenlik açığına sebep olursa?

Bazı programlar, kullanıcıların ana dizinlerinde (C:\users\root gibi) bazı konfigürasyon dosyaları oluşturur veya registry içerisinde bazı kayıtlar oluşturur. Program açılışında da bu konfigürasyon dosyalarına ve kayıtlara bakarak gerekli hazırlıkları yapar. Yani kısaca her programın dosyaları bir klasör içerisinde olmayabilir. Programın işleyişini engeller mi peki? Aslında bazen evet bazen hayır. Eğer program lisanslı ise kayıt defterine bakabilir açılışta. Bu durumda başka bilgisayarda gerekli kaydı göremeyen program açılmakta inatçılık edecektir :slight_smile:

Ve son olarak şunu da söylemek isterim. Bazı programlar kurulurken kendisiyle beraber gerekli olan bazı bileşenleri de sisteme kurar. Bu bileşenler bazen program bazen de sürücü olabilir. Bu durumda tek paket haline getirmeye çalıştığınız programın 3. parti bağımlılıkları olabilir.

Bu ve bunun gibi durumları da göz önüne almak lazım.

1 Beğeni

Evet.

Algoritmayı değiştiriyoruz;

Portable yapılacak programın setup dosyasını çalışırken izleyeceğiz. Ne yapmış, ne etmiş hepsini kayıt altına aldıktan sonra bunları da sunucuya göndereceğiz. Sunucu portable programa bunları gömecek. Portable program her açlışında bu değişiklikler yapılmış mı kontrol edecek. Yapılmamışsa yapacak, programı sonra çalıştıracak. Ayrıca portable olacak program çalışmak için başka programlara ihtiyaç duyuyorsa (örneğin oyunsa DirectX gibi) onları da geçici olarak kuracak. Farklı windows sürümlerindeki farklı kütüphanelere bir çözüm üretemedim henüz.

Peki programın her ihtiyacını biz karşılıyorsak, neden orijinal setup dosyasının yerine tercih edelim? O zaman portable olmaktan çıkmıyor mu?

Yanlış anlama bunları bir ihtimal olarak sunuyorum. Ve anlatmak istedigim şey eğer bir program portable değilse bunun nedenleri vardır. Bunları konuşmak lazım.

1 Beğeni

Portable sürümün amacı kurulum gerektirmeyen tıkla çalıştır mantığı değil mi? Sizin yapacağınız portable sürümler sürücü yükleyecek kütüphane yükleyecek vs. @coderistan nın dediği gibi bunları zaten yapacaksa niye setup dosyasını tercih etmeyelim.

docker'ın bu konuda yardımı dokunabilir.” diye düşündüm okurken…

Onu daha önce de demiştiniz, bakmayı unutmuşum hocam hatırlattığınız iyi oldu. Bugün bakarım.

Anladığım kadarıyla docker, konteynerleşme ile alakalı. anlaşılan bayağı emek var. Ama bunun bize ne yararı olacak anlamadım.

evet bende yeni basladim bence güzel olabilir.

Siz bir programın kurulum dosyasını oluşturmaya çalışmıyor musunuz? Bunu bir Docker container’ı olarak yaparsanız her yerde çalışır. Mantık tamamen farklı ancak sadece bağımlılıkları değil komple bir ortamı taşınabilir yaptığınız için uyumsuzluk sorunları yaşamıyorsunuz.

@coderistan ilk bakista dusunebildigim butun potansiyel problemleri yazmis. Hepsinin gormezden gelindigini varsayiyorum.

base64 icin “cevirmek” fiilini kullanmak daha dogru olabilir. Neden boyle bir sey yapiliyor?

Bunu ilk program da (sunucuya gondermeden once) yapabilir, son program da (sunucudan aldiktan sonra). Hatta sunucunun hic bir sey yapmasina gerek yok.

Buyuk cloud provider’larinin hepsi. Ama sunucu Windows olmak zorunda degil?

1 Beğeni

Temiz?

Kullandigin alete/kutuphaneye bakar tabi ama boyle olmak zorunda degil.

Sunucularin turune gore degisiyor. IIS’lerin %100’u Windows mesela.
Projeye ne uyarsa onu kullanirsin.

Django back-end services için kullanılabiliyor mu?

Django’nun asıl amacı back-end.