Çözüldü C# WinUI 3 ile Dynamic proje nasıl yapılır?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
26 Temmuz 2023
Mesajlar
4.558
Makaleler
25
Çözümler
169
Yer
Başkent
Daha fazla  
Sistem Özellikleri
HP Victus 16 S1035NT
Cinsiyet
Erkek
Meslek
Yazılımcı/Yayıncı
Bu gerçekten çok karmaşık bir iş. Bu birden fazla yöntemle mümkün olabileceğini gördüm ancak hangisini seçmeliyim ve nasıl yapabileceğim hakkında pek bir bilgim şu an yok. İni. JSON. Text dosyalarında XAML ve CS kodlarını tutup dinamik olarak .exe çalışırken kullanmasını buldum fakat ne kadar sağlıklı veya güvenli bilmiyorum, sadece doğru yöntem bu değilmiş gibi hissediyorum daha iyi ve profesyoneli varmış gibi. Kafamda ufak bir düşünce var:
Bir WinUI 3 uygulaması düşününün ve bu uygulamaya sonradan kullanıcı isteğine bağlı olarak bir page yüklenecek ama bu .exe'nin içinde gömülü olacak. Yani önceden .exe farklıydı sonra kullanıcı istediği xaml ve CS dosyaları eklendi ortaya yeni .exe çıktı bu mümkün mü? Yani bir tane. İni. JSON veya. Text dosyasının içindeki kodları dinamik olarak .exe sürekli çekmek yerine bir defa alacak ve tamamen artık .exenin içinde olacak bu mümkün mü? Kendi kendini derleme gibi bir şey olacak .dll dosyaları gömeceğiz yani.

Nasıl desem bilemedim, umarım anlatabilmişimdir.

(Ekleme)
Kodun düzgün bir şekilde programa eklenebilmesini istemekle birlikte, kodu bulundurduğumuz dosyanın içini açarak bütün kodun ifşalanmasını da istemiyorum. %100 güvenlikli olsun istemiyorum ama %100 de güvenliksiz olmasını da istemiyorum. Mecburen dış dosyadan dinamik olarak veri çekeceksek eğer.
 
Son düzenleyen: Moderatör:
Çözüm
O zaman sadece gereksiz eklentileri olduğu gibi .json dosyasından çekerim (C# ve XAML de olabilir. Veya öneriniz varsa söyleyebilirsiniz). Önemli olanları da projenin içinde varsayılan olarak getirtirim.
Şuan hatırlamıyorum ama derlenmiş XAML dosyalarını kullanabilirsin. İstersen araştır eğer runtime olarak kullanılabiliyorsa optimizasyon ve güvenlik açısından bir artı olur.

O zaman sadece gereksiz eklentileri olduğu gibi .json dosyasından çekerim
Zaten diğer uygulamalar bir dosyayı almak için farklı bir yöntem kullanmıyor eğer bir resim alacaksan illa resim şeklinde alacaksın başka yolu yok. Bahsettiğimiz şey sadece derlenen kod için geçerliydi. 3D objeler de dosya şeklinde olmak zorunda mesela.

Her şeyi hazırlar zip dosyası şeklinde sıkıştırırsın uzantısını da .wuzip şeklinde yaparsın 😀. Yada
yine struct mantığını kullanarak dosyaları sıkıştıracak bir yöntem geliştirip kendi sıkıştırılmış dosyanla saklarsın ama yine "ufak çaplı" kategorisine girmez.

Aslında sonda oluşan zip dosyası üzerinde basit bir oynama yapıp kod içinde onu geri çekersen de kolay ve bir tık daha uğraştırıcı olur 😀 (görmek isteyen için)
Sorunu pek anlayamadım ama kastettiğin şey exe dosyasının içine bir resource gömmek mi?
Evet benzer bir şey. Yani şöyle özetleyeyim:
Bir .exe var sorunsuz çalışıyor. Kullanıcı ekstra özellik eklemek için internetten bir şeyler indiriyor ve bu kodlar .exenin içine gömülüyor. Bu kodları istediği zaman ekleyebiliyor ve silebiliyor. Tam olarak bunu istiyorum.
 
Evet benzer bir şey. Yani şöyle özetleyeyim:
Bir .exe var sorunsuz çalışıyor. Kullanıcı ekstra özellik eklemek için internetten bir şeyler indiriyor ve bu kodlar .exenin içine gömülüyor. Bu kodları istediği zaman ekleyebiliyor ve silebiliyor. Tam olarak bunu istiyorum.
Şimdi exe'in yani PE dosyalarının yapısına bakarsan istediğin şeyi ekleyebilirsin -özellikle .rsc bölümüne- biraz C struct yapısı gerekiyor ama pinvoke'ta bulup C#'ta düzenlersin. Ancak bu biraz tehlikeli (exe'i bozabilirsin) ve checksum hesaplaman lazım. Tabii Windows'ta checksum hesaplayan bir exe vardı o da kullanılabilir. Neyse sonuç olarak exe'in içine dosya yerleştirirsen bile bu normal bir dosyaya erişmekten sadece bir adım daha zor olur, çok sağlıklı bir yöntem değil.

 
Şimdi exe'in yani PE dosyalarının yapısına bakarsan istediğin şeyi ekleyebilirsin -özellikle .rsc bölümüne- biraz C struct yapısı gerekiyor ama pinvoke'ta bulup C#'ta düzenlersin. Ancak bu biraz tehlikeli (exe'i bozabilirsin) ve checksum hesaplaman lazım. Tabii Windows'ta checksum hesaplayan bir exe vardı o da kullanılabilir. Neyse sonuç olarak exe'in içine dosya yerleştirirsen bile bu normal bir dosyaya erişmekten sadece bir adım daha zor olur, çok sağlıklı bir yöntem değil.

Peki diğer popüler yazılımlar hangi yöntemi tercih ediyorlar? Dışarıdan paket yüklerken.
Veya sen hangisini tercih ederdin/önerirdin?
Nedenleri ve avantaj/dezavantajlarıyla.
 
Son düzenleme:
Peki diğer popüler yazılımlar hangi yöntemi tercih ediyorlar? Dışarıdan paket yüklerken.
Nedenleri ve avantaj/dezavantajlarıyla.
Yani yapmak istediğin şey özelleştirilebilir bir program değil mi? Direkt exe dosyasını taşıyarak kaynaklarını da taşımış oluyorsun. Böyle bir şey yapan program hatırlamıyorum, örnek verirsen güzel olur. Ama önemli olan neyi önemsediğin yani eğer yaptığın projenin özelliği bu ise mantıklı ama önemli olan şey kolaylık+güvenlik ise pek mantıklı değil. Ona göre başka bir yöntem düşünürüz.

Veya sen hangisini tercih ederdin/önerirdin?
Nedenleri ve avantaj/dezavantajlarıyla.
Dediğim gibi duruma göre.
 
Yani yapmak istediğin şey özelleştirilebilir bir program değil mi? Direkt exe dosyasını taşıyarak kaynaklarını da taşımış oluyorsun. Böyle bir şey yapan program hatırlamıyorum, örnek verirsen güzel olur. Ama önemli olan neyi önemsediğin yani eğer yaptığın projenin özelliği bu ise mantıklı ama önemli olan şey kolaylık+güvenlik ise pek mantıklı değil. Ona göre başka bir yöntem düşünürüz.


Dediğim gibi duruma göre.
Benim isteğim şu:
Bazı özellikler var ama kimine göre gerekli kimine göre gereksiz. Bu durumda kullanıcı bu özelliği keyf-i arzusu doğrultusunda kullanabilsin istiyorum. Ancak bir türlü doğru yöntemi bulamadım. Araştırdım makaleler ve AI'ler pekte yardımcı olamadı. Benim de şuan aklıma çok güzel bir örnek gelmedi ama oyun olarak örnek verirsek. PUBGM mesela, İçeriklerini yüklemek sana kalmış ister yükle ister sil. Oyunu etkilemiyor.
 
Benim isteğim şu:
Bazı özellikler var ama kimine göre gerekli kimine göre gereksiz. Bu durumda kullanıcı bu özelliği keyf-i arzusu doğrultusunda kullanabilsin istiyorum. Ancak bir türlü doğru yöntemi bulamadım. Araştırdım makaleler ve AI'ler pekte yardımcı olamadı. Benim de şuan aklıma çok güzel bir örnek gelmedi ama oyun olarak örnek verirsek. PUBGM mesela, İçeriklerini yüklemek sana kalmış ister yükle ister sil. Oyunu etkilemiyor.
Bu durumda en mantıklı yöntem bence C struct'ı bir dosyaya yazmak. Hem çözülmesi zor olur hem çok hızlı veri çekersin genelde çoğu program bu şekilde çalışır. Zaten bazı oyun ve programlar, işletim sistemlerinin ve PE-ELF'nin kendisi de dahil bu şekilde veri saklar. Yani bir struct'ı dosyaya yazacaksın (yada dosyanın kendisi olur) sonra ram'e yükleyip direkt oradan struct'ı yönetirsin hiç veri dönüşümü falan yapman gerekmez direkt ram'den map'lersin. C# için yeteri kadar kaynak bulursun o açıdan sorun olmaz.
 
Hem çözülmesi zor olur
Burayı anlayamadım. Nasıl çözülmesi zor olacak ki?
Bir de uygulamaya özel uzantılı okunulabilir bir dosya mı yapmalıyım yoksa .text, .ini veya .json yeterli mi?
 
JSON biraz kolaya kaçmak olur. Ayrıca hem daha yavaş hemde içindekiler açık bir şekilde gözükür. Dediğim yönteme göre birisi senin uygulamana tersine mühendislik yapıp struct'ların yapısını alması ardından bunları map'layecek bir program yazması yada kendisi teker teker okumaya çalışması lazım.

Burayı anlayamadım. Nasıl çözülmesi zor olacak ki?
Bir de uygulamaya özel uzantılı okunulabilir bir dosya mı yapmalıyım yoksa .text, .ini veya .json yeterli mi?
Yanlışlıkla tam istediğin şeye cevap vermişim 😀

Yada güvenlik benim için inanılmaz derecede önemli diyorsan struct'ı C# ile değil C/C++ ile yapar, yönetir ardından da C# ile çağırırsın.

Bu şekilde bir kişinin struct'ın yapısını alabilmesinin hiç bir yolu yok. Debugging yapması lazım bu da WinUI için ekstra zor.
 

Technopat Haberler

Yeni konular

Geri
Yukarı