ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
888
888
EMPFEHLEN
-
Hallo Forum,
ich hatte Probleme mir einen passenden "Titel" für dieses
Thema auszudenken.
Hier nochmal genau mein Problem(in Kurzform):
Ich habe a.exe und brauche b.exe die
a.exe "dropt" und dabei ein String (fest) mitgibt.
Ich habe Probleme das zu erklären, falls jemand nicht genau weiß was ich meine
kann ichs ja nochmal genauer erklären.
Das einzige was ich bis Jetzt gefunden habe ist:
@EDIT: Mein neuer Versuch nachzulesen in 1.Antwort
Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
String textBox2 = @"123.exe"; //App Domain AppDomain ad = AppDomain.CurrentDomain; //Assembly of EXE AssemblyName am = new AssemblyName(); am.Name = "TestNAME"; //Assembly maker AssemblyBuilder ab = ad.DefineDynamicAssembly(am, AssemblyBuilderAccess.Save); //Module maker ModuleBuilder mb = ab.DefineDynamicModule("MODULE", textBox2); //Type maker TypeBuilder tb = mb.DefineType("Type", TypeAttributes.Public); //Method Maker MethodBuilder metb = tb.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.Static, null, null); //Assembly maker entry Area ab.SetEntryPoint(metb); //MSIL Code Generator ILGenerator il = metb.GetILGenerator(); //Create EXE il.EmitWriteLine("testbox1"); il.Emit(OpCodes.Ret); tb.CreateType(); //Save EXE ab.Save(textBox2);
Allerdings macht der Code
1. nicht das was ich will und
2. ich versteh ihn viel zu wenig um daraus (vielleicht) etwas zu machen was ich will.
Ich suche nach allen Möglichkeiten die es gibt einen String von b.exe dauerhaft an a.exe zu binden und in a.exe abfragen zu können. (da ich weiß das es mehrere Möglichkeiten gibt)
danke im Voraus,
RELAXGeändert von RELAX (18.09.11 um 07:48 Uhr) Grund: Andere Methode
-
Hallo,
ich bin jetzt auf die Idee gekommen das Programm nicht zu "erstellen" sondern nur im Nachhinein zu verändern.
Dazu habe ich eine Ressource im Programm angelegt: "infer.txt".
Diese versuche ich jetzt zu bearbeiten, was bisher fehlschlug.
Ich habe heute diesen Code gefunden:
Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
System.Reflection.Assembly Assembly = System.Reflection.Assembly.LoadFile("Run4J.exe"); System.Type[] types = Assembly.GetTypes(); foreach (System.Type type in types) { if (type.Name == "Resources") //prüfen, ob das die Resourcenklasse ist { foreach (System.Reflection.PropertyInfo prop in type.GetProperties()) // Jedes property durchlaufen { if (prop.PropertyType.ToString() == "System.String") //Prüfen, ob die Resource eine Textresource ist { if(prop.Name == "TitelText"){ // Prüfen, ob das die zu verändernde Resource ist System.Windows.Forms.MessageBox.Show(prop.Name + " " + prop.GetGetMethod().Invoke(new object(), new object[0])); // Den wert der Resource + Name ausgeben prop.GetSetMethod().Invoke(new object(), new object[] {"Neuer Text"}); //Wert verändern System.Windows.Forms.MessageBox.Show(prop.Name + prop.GetGetMethod().Invoke(new object(), new object[0])); // Prüfen, ob der Wert geändert wurde } } } } } Assembly.EntryPoint.Invoke(new object(), new object[0]); // Das bearbeitete Programm ausführen
Allerdings bin ich mir bei diesen stellen unsicher
was ich einsetzen muss.
Code csharp:1
type.Name == "Resources"
Code csharp:1
if (prop.Name == "TitelText")
Die Ressource in der Run4J.exe heißt infer.dinf
und ist direkt neben der Run4J.cs(ohne Unterordner).
Intern lese ich sie aus mit diesem 'Pfad': "Run4J.infer.dinf"
Kann mir jemand helfen?
PS: Ich vermute der Code ist gar nicht dafür gedacht was ich machen will.
infer.dinf ist eine einfache Textdatei ich ich in C# als Item eingefügt habe.
Allerdings hab ich keinen anderen Ansätze und wen ich den Text einfach mit
"File Einlesen".replace "file schreiben" mache kommt der ERROR: "Keine win32 Anwendung..."Geändert von RELAX (18.09.11 um 07:54 Uhr) Grund: Zweifel an der Welt
-
Ich glaube langsam zu verstehen, was du meinst. Lass mich das kurz zusammenfassen, um sicher zu sein:
Du hast ein Programm a.exe. Dieses soll auf der Festplatte das Programm b.exe erstellen. In b.exe wird eine String-Konstante benutzt, dessen Wert du verändern möchtest, bevor du b.exe auf die Festplatte schreibst. Und du hast den Quellcode beider Programme, richtig? Oder muss b.exe nicht unbedingt auf die Festplatte geschrieben werden, sondern reicht es wenn die Anwendung in a.exe vorhanden ist und daraus geladen werden kann?
Meine erste Idee wäre hier auch gewesen, b.exe binär zu lesen und den gesuchten Text zu ersetzen. Ich kenne mich nicht aus, wann sowas funtkioniert. Aber wenn der alte String und der neue String die selbe Byte-Anzahl haben, dann sollte es funktionieren (also z.B. 'abc' durch 'def' ersetzen geht, aber durch 'defg' ersetzen geht nicht, vermute ich).
Für den Fall, dass es genügt b.exe aus a.exe heraus zu laden und zu starten und b.exe nicht auf der Festeplatte vorhanden sein muss (sondern als Ressource in a.exe), dann könntest du b.exe einfach einen Befehlszeilenparameter mitgeben jedesmal, wenn b.exe gestartet wird.
Edit: Diese Links könnten dich eventuell interessieren:- Editing resources in existing .net assemblies
- Compiling code during runtime (Du könntest den Quellcode von b.exe in a.exe als Ressource abspeichern und a.exe beibringen, wie der Quellcode kompiliert werden soll.)
Geändert von Shakie (18.09.11 um 11:25 Uhr)
hihi = -h²
-
Ja, du hast recht. Mein Problem ist das das was ersetzt wird länger ist.
Wahrscheinlich muss ich die "Compiling code during runtime" Methode benutzen.
Eine Frage dazu. Muss man dafür einen Compiler installiert haben?
..also wegen der Kompatibilität u.s.w.?
-
Der .Net Compiler ist beim Framework mit bei.
Hab sone ähnliche Anwendung für die Arbeit geschrieben, also DLL Erstellung zur Laufzeit, und da läuft kein VS.
Ähnliche Themen
-
Pfad zu einem Programm öffnen, Programm dann im Vordergrund (!) ausführen?
Von G3kai im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 19.09.08, 19:11 -
einzelne Programm mit eigenem Programm starten
Von mgraf im Forum Microsoft WindowsAntworten: 12Letzter Beitrag: 12.09.08, 21:07 -
Gestartetes Programm kann kein weiteres Programm starten
Von RuFFnEcK im Forum VisualStudio & MFCAntworten: 3Letzter Beitrag: 04.10.06, 13:48 -
Programm beenden, Programm sichtbar starten
Von yui05 im Forum PHPAntworten: 0Letzter Beitrag: 25.04.05, 20:06 -
Dropper DR/Inor.M
Von Axel007 im Forum Security (Viren, Trojaner, Spam)Antworten: 2Letzter Beitrag: 10.03.04, 15:36





Zitieren
Login





