[C#] Exebinder (joiner) erstellen Idee?

Hallo,

Ich würde gerne an eine exe Datei noch eine andere dran hängen sodass, wenn ich die zusammengefasste Datei Starte, beide Dateien Starten.

Mal vorne weg ich habe nicht vor etwas Trojaner/Viren artiges zu Programmieren, von solchem Müll Programmen halte ich recht wenig!

Sowas kennt man von gewissen seiten ja und wird dort meist exebinder genannt.

Jedoch würde ich diesen Effekt gerne aus einer Application herraus haben d.h. ich kann kein Fremd Programm benutzen.

Ich habe eigendlich nicht so recht Ahnung wie das geht.
Mein Anlauf war einfach die Beiden Dateien Binär zu Öffnen und direkt hintereinander abzuspeichern.

Code:
using System;
using System.Windows.Forms;
using System.IO;

namespace Bind
{
	public class Bind
	{
		[STAThread]
		private static void Main()
		{
			string dir = Application.StartupPath + "\\";
			
			FileStream fs1 = File.OpenRead(dir + "1.exe");
			FileStream fs2 = File.OpenRead(dir + "2.exe");
			
			byte[] p1 = new byte[fs1.Length];
			fs1.Read(p1, 0, (int)fs1.Length);
			
			byte[] p2 = new byte[fs2.Length];
			fs2.Read(p2, 0, (int)fs2.Length);
			
			FileStream fs3 = File.Create(dir + "3.exe");
			
			fs3.Write(p1, 0, p1.Length);
			fs3.Write(p2, 0, p2.Length);
			
			return;
		}
	}
}
Leider klappt das nicht, was ich mir eigendlich auch gedacht habe *g*
Er führt dann nur das Programm 1 aus und Ignoriert das 2. gänzlich.

Mein 2. Anlauf war dann 3 Programme zu machen und alle hintereinander zu machen, wozu ich den obrigen Quellcode benutzt habe. Welcher dann sich selber ausließt und die Programme quasi extrahiert und im Temp starttet.

Code:
using System;
using System.Windows.Forms;
using System.IO;

namespace _
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			string dir = Application.StartupPath + "\\";
			// Only to get the File Size
			FileStream fs1 = File.OpenRead(dir + "1.exe");
			FileStream fs2 = File.OpenRead(dir + "2.exe");
			FileStream fs3 = File.OpenRead(dir + "3.exe");
			
			Environment.CurrentDirectory = Environment.GetEnvironmentVariable("temp");
			string tmpdir = Environment.CurrentDirectory + "\\";
			
			// To write the Programs in Temp
			FileStream fsa = File.Create(tmpdir + "1.exe");
			FileStream fsb = File.Create(tmpdir + "2.exe");
			
			
			FileStream fsr = File.OpenRead(dir + "Result.exe");
			
			byte[] p1 = new byte[fs1.Length];
			byte[] p2 = new byte[fs2.Length];

			
			fsr.Position = (int)fs3.Length;
			fsr.Read(p1, 0, (int)fs1.Length);
			
			fsr.Flush();
			
			fsr.Position = (int)(fs3.Length + fs1.Length);
			fsr.Read(p2, 0, (int)fs2.Length);
			
			fsa.Write(p1, 0, p1.Length);
			fsb.Write(p2, 0, p2.Length);
			
			
			fs1.Close();
			fs2.Close();
			fs3.Close();
			fsa.Close();
			fsb.Close();
			fsr.Close();
			
			
			System.Diagnostics.Process proc1 = new System.Diagnostics.Process();
			proc1.EnableRaisingEvents=false;
			proc1.StartInfo.FileName=tmpdir + "1.exe";
			proc1.Start();
			
			System.Diagnostics.Process proc2 = new System.Diagnostics.Process();
			proc2.EnableRaisingEvents=false;
			proc2.StartInfo.FileName=tmpdir + "2.exe";
			proc2.Start();
			
			return;
		}
	}
}

Funktionier wunderbar, beide Dateien werden Ausgeführt...
Aber ein Prob habe ich *g* In dem Beispiel weis ich genau wie groß die Dateien sind und erstelle da die Datei "C" nach belieben... Aber das soll ja alles Automatisch werden, d.h. Programm A und B werden ausgewählt und dann soll Das fertige Programm, Programm C selbstständig einfügen. Aber da Programm A und b ja immer Unterschiedlich groß sind muss ich ja bei der Ausführung Programm C immer unter neuen Beningungen neu erstellen oder zumindest die größen in Programm C ändern.

Also das Programm was man hier jetzt sieht ist das Programm C welchen ist aber erst erstellt habe als ich wusste wie Groß A und B sind und dann habe ich die Hintereinader in eine EXE geschrieben. Aber in der Praxis will ich ja Programm C nicht immer neu erstellen!

Hab aber eigendlich keine Idee wie ich das anstellen soll. Hat da jemand ne Lösung oder Idee zu?
 
Erstmal danke für deine Hilfe, allerdings so gut ist mein Englisch noch nicht das ist da so wirklich durchblinke, aber gut akzeptiere ich das jetzt einfach mal so das ich die nicht hintereinader schrieben kann...was allerdings dann im endeffekt trotzdem geklappt hat auch wenns vll. nicht so gedacht ist naja wie auch immer.
Hast du oder wer auch immer dann vll. eine Idee wie ich das problem mit dem EXE-Binder angehen kann?

Wie wird sowas normalerweiste geregeld? Weil ein EXE Binder ist ja nix auzergewähnliches. Hat da jemand ne Idee, Tipp oder gar ne art Tutorial?
 
Zurück
Oben