Witam mam problem chciałbym napisać coś w stylu takim mam program w którym wpisuje tekst wybieram zaznaczam checkboxy i potem po kliknięciu butona generuje mi się drugi plik wykonywalny po którego odpaleniu wyświetli mi jakie checkboxy były zaznaczone jakie nie i co wpisałem w textboxach ogólnie NIE MA problemu jedyny to to generowanie 2 pliku wykonywalnego jak to zrobić?
A nie przesadzasz aby? Nie stworzysz pliku wykonywalnego bez łączenia kodu programu w pamięci i wywoływania zewnętrznego kompilatora. Albo jeszcze lepiej, grzebaniu po tablicy bajtów jakiegoś szablonowego programu w zasobach, co w dodatku u klienta pewnie i tak nie zadziała. Tyle moich pomysłów. Inaczej mówiąc, masakra. I to zupełnie niepotrzebna.
Rozwiązanie dla normalnych psychicznie - stwórz sobie mały plik 'zapisu' który będzie zawierał np. takie dane: (to jest przykład, lepiej byłoby użyć do tego XML-a)
Checkbox1=TAK
Checkbox2=NIE
Checkbox3=NIE
TextBox1=TekstTekstTekst
TextBox2=TekstTekstTekst
i to będzie rozwiązanie lepsze pod każdym względem...
W sumie sztuka dla sztuki. Lepiej dokonywać zapisy takich danych do pliku xml, txt, etc.
Jeśli się uprzesz, dasz radę zrobić tak jak chciałeś:
string codeToCompile = tb_assemblyCode.Text; //tutaj musisz przypisać całość kodu, który chcesz skompilować, musisz tam ując wszystkie wartości przez konkatenację i polączyć je z metodami Console.WriteLine(..) aby tworzony plik exe byl w stanie wyświetlić Twój wynik.
var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.dll"});
string outputFilePath =Path.Combine(fileName); // filename to ścieżka pliku exe, który tworzymy
parameters.OutputAssembly = filePath;
parameters.GenerateInMemory = false;
parameters.GenerateExecutable = true;
CompilerResults results = csc.CompileAssemblyFromSource(parameters, codeToCompile);
StringBuilder sb = new StringBuilder();
foreach (var x in results.Errors)
sb.AppendLine(x.ToString());
if (!results.Errors.HasErrors) { }// obsługa niepowodzenia w kompilacji
kod kopiowałem ze swojego projektu, wiec na szybko mogłem coś pominąć.
Przestrzeń nazw to:
using Microsoft.CSharp;
using System.CodeDom.Compiler;
Hmm może powiem to tak potrzebuje coś z typu STUB.exe jak mamy np w trojanach tam jest bulider i generuje plik wykonywalny potrzebuje coś w tym stylu
Wersja z C# jest dla mięczaków nie znających struktury pliku PE. Prawdziwi mężczyźni generują plik PE od podstaw, nagłówek DOS, PE, kolejne sekcje, w .code gdzie generujesz dynamicznie kod x86 i linkujesz z danymi w .data, wbrew pozorom nie jest to jakieś wybitnie trudne, wystarczy znajomość podstawowych struktur formatu PE i assemblera.
Prawdziwi mężczyźni generują plik PE od podstaw
w programowaniu nie operuje się pojęciami „mięczaki” i „prawdziwi mężczyźni”, tylko „to za dużo roboty” i „tak będzie łatwiej”.