C# exe oluşturma

Redanort

Üye
24 Şub 2014
118
0
EN Sonunda...... C# exe oluşturma

Beyler ben kaç gündür internette exe oluşturmayı arıyorum ama hala bulamadım yardım Edin Lütfen...
yapmak istediğim form daki butona tıkladığımda benim vermiş olduğum dll ye göre exe oluşturacak
c# ta yapıyorum...
çok acil
 
Son düzenleme:

hamush

Katılımcı Üye
26 Haz 2012
635
1
Şimdi sen bir dll'i parametre olarak vereceksin... oradan exe yapacak.. ama ne yapacak o dll'e?

Mesela verdim diyelim şu anda MercatorGoogle.dll diye bir dll'im var, tek bir static class, bu class'ta da WebMercator koordinatlarını google maps koordinatlarına çeviren fonksiyonlar var. Bu dll'i aldıktan sonra executable dosyanın ne yapmasını istediğini anlayamadım.
 

Redanort

Üye
24 Şub 2014
118
0
aynı hakopsun yaptığı gibi. yani bir usercontrol var orada ben formu hazırlayacam mesala loger ben yazılımdan ona ip ,port,admin bilgilerini verecem ve o usercontrol(dll) kullanarak bana exe oluşturacak ...
mesala bende o exe'yi başka biryere atacam yapmak istediğim bunungibi...
 

hamush

Katılımcı Üye
26 Haz 2012
635
1
Çok eskiden C#'ta runtime evaluation mümkün değildi. Sonra CSharpCodeProvider gibi class'lar çıktı. Ama hala uzun yoldur.

Bence en kolay yol: Exe dosyası gereken, IP, Port, admin bilgilerini kullanıp işlemi yapabilecek şekilde, exe olarak hazır template durur. Senin programın bu exe'yi kopyalar, embedded resource olarak gereken bilgileri değiştirir. Böylesi daha kolay olur.

İngilizce biliyorsan Understanding Embedded Resources in Visual Studio .NET - CodeProject çok güzel açıklıyor.. Bilmiyorsan kaynak bulman birazcık daha zor olabilir.

Kısaca, embedded resource'u AssemblyDefinition class'ını kullanarak replace edersen, exe onu kullanabilir. Fakat resource'un olduğu bölge değişeceğinden standart yöntemlerle (<namespace>.Resources içinden) o resource'u almak mümkün olmaz, program crash eder. Bundan dolayı Assembly class'ının GetManifestResourceStream metoduyla stream olarak alıp, istediğin veriye dönüştürürsün.
 

hamush

Katılımcı Üye
26 Haz 2012
635
1
Konu ilgimi çekti epeyce.. Dayanamadım bir test yaptım.. Önce bir test executable'ı yapıyoruz.

Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EmbeddedTest
{
    class Program
    {
        static **** Main(string[] args)
        {
            Console.WriteLine("Bu executable dosyadaki bütün kaynaklar:");
            try
            {
                System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
                foreach (string isim in assembly.GetManifestResourceNames()) Console.WriteLine(isim + "-->" + new System.IO.StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(isim)).ReadToEnd());
            }
            catch
            {
                Console.WriteLine("Kaynakları okurken hata oluştu.");
            }
        }
    }
}
Bu programı şu anda çalıştırdığımızda hiç bir kaynak içermiyor...

Bir de resource embed eden programı yazıyoruz..

Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EmbedTest
{
    class Program
    {
        static **** Main(string[] args)
        {
            Mono.Cecil.AssemblyDefinition definition = Mono.Cecil.AssemblyFactory.GetAssembly("d:\\test.exe");
            System.Text.UTF8Encoding encoder = new UTF8Encoding(false);
            definition.MainModule.Resources.Add(new Mono.Cecil.EmbeddedResource("EmbeddedTest.ilkTest", Mono.Cecil.ManifestResourceAttributes.Public, encoder.GetBytes("Kaynak Eklenmiş")));
            definition.MainModule.Resources.Add(new Mono.Cecil.EmbeddedResource("EmbeddedTest.ikinciTest", Mono.Cecil.ManifestResourceAttributes.Public, encoder.GetBytes("Bu da ikinci bir kaynak...")));
            Mono.Cecil.AssemblyFactory.SaveAssembly(definition, "d:\\test.exe");
        }
    }
}

Haa bir de söylemeyi unutmuşum.. AssemblyDefinition Mono.Cecil'in bir parçasıdır.. Okursan zaten assembly'leri manipule etmek için çok yararlı güzel bir kütüphane.. Bu tip bir program için Mono.Cecil.dll'i proje sayfasında herhangi bir zip dosyasından indirip reference etmen yeter.

Tek sorun, normalde visual studio resource embed ederken aslında bir resource reader embed ediyor o her ne halt ise.. Önemsemedim, okumadım. Ama kendimiz text'in kendisini embed edip, kendisini okuyunca hiç bir sorun çıkmıyor.
 

Redanort

Üye
24 Şub 2014
118
0
Konu ilgimi çekti epeyce.. Dayanamadım bir test yaptım.. Önce bir test executable'ı yapıyoruz.

Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EmbeddedTest
{
    class Program
    {
        static **** Main(string[] args)
        {
            Console.WriteLine("Bu executable dosyadaki bütün kaynaklar:");
            try
            {
                System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
                foreach (string isim in assembly.GetManifestResourceNames()) Console.WriteLine(isim + "-->" + new System.IO.StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(isim)).ReadToEnd());
            }
            catch
            {
                Console.WriteLine("Kaynakları okurken hata oluştu.");
            }
        }
    }
}
Bu programı şu anda çalıştırdığımızda hiç bir kaynak içermiyor...

Bir de resource embed eden programı yazıyoruz..

Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EmbedTest
{
    class Program
    {
        static **** Main(string[] args)
        {
            Mono.Cecil.AssemblyDefinition definition = Mono.Cecil.AssemblyFactory.GetAssembly("d:\\test.exe");
            System.Text.UTF8Encoding encoder = new UTF8Encoding(false);
            definition.MainModule.Resources.Add(new Mono.Cecil.EmbeddedResource("EmbeddedTest.ilkTest", Mono.Cecil.ManifestResourceAttributes.Public, encoder.GetBytes("Kaynak Eklenmiş")));
            definition.MainModule.Resources.Add(new Mono.Cecil.EmbeddedResource("EmbeddedTest.ikinciTest", Mono.Cecil.ManifestResourceAttributes.Public, encoder.GetBytes("Bu da ikinci bir kaynak...")));
            Mono.Cecil.AssemblyFactory.SaveAssembly(definition, "d:\\test.exe");
        }
    }
}

Haa bir de söylemeyi unutmuşum.. AssemblyDefinition Mono.Cecil'in bir parçasıdır.. Okursan zaten assembly'leri manipule etmek için çok yararlı güzel bir kütüphane.. Bu tip bir program için Mono.Cecil.dll'i proje sayfasında herhangi bir zip dosyasından indirip reference etmen yeter.

Tek sorun, normalde visual studio resource embed ederken aslında bir resource reader embed ediyor o her ne halt ise.. Önemsemedim, okumadım. Ama kendimiz text'in kendisini embed edip, kendisini okuyunca hiç bir sorun çıkmıyor.

Öncelikle Yardımın için teşekkürler

...Gelelim Asıl Meseleye...

Senden Başka kimsenin yardım etmemesine rağmen okadar benden rütbeli kişilere bir yardım eder misin dememe rağmen ve kimsenin yardım etmemesinden dolayı bukadar uzun sürdü ama
sonunda buldum ve yaptım ben rütbeliler gibi yapmayacam isteyen bu konuya mesaj atıp kaynakkodları isteye bilir...
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.