Autor Beitrag
Ccenter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: So 27.11.11 15:58 
Nabend,

ich möchte aus Übungszwecken eine art Packer schreiben. Dieser soll Dateien in eine sich selbst entpackende .exe verschieben.
Ich habe mir das so vorgestellt, dass ich ein Hauptprogramm schreibe, welches per CodeDom eine neue Exe erstellt in dem die Dateien als Ressourcen mitgeliefert werden.
Wenn die Exe fertig erstellt wurde, macht man einen Doppelklick darauf und es werden die mitgelieferten Dateien entpackt.

Ich habe in einem älteren Thread etwas von RessourceWriter gelesen. Die Klasse erstellt allerdings eine fertige Ressourcedatei. Wie verbidne ich diese mit der von CodeDom ersteugten Exe?
Ccenter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: So 27.11.11 16:57 
Nach etwas Durchforsten des Internets habe ich nun folgenden Code:

ausblenden C#-Quelltext
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:
CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
string Output = @"created.exe"
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = Output;
parameters.ReferencedAssemblies.Add(@"C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll");
parameters.Win32Resource = @"myResources.res";

CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, textBox1.Text);

if (results.Errors.Count > 0)
{
     string Source = "";
     foreach (CompilerError CompErr in results.Errors)
     {
              Source +=
              "Line number " + CompErr.Line +
              ", Error Number: " + CompErr.ErrorNumber +
              ", '" + CompErr.ErrorText + ";" +
              Environment.NewLine + Environment.NewLine;
              MessageBox.Show("Error:\n" + Source);
     }
}
else
{
                          
     MessageBox.Show("Successful");
}



Mit parameters.Win32Resource = @"myResources.res"; gebe ich den Pfad zu der Ressourcendatei an.
Jedoch bekomme ich immer die Fehlermeldung, dass es eine ungültige Win32-Resourcendatei sei.
Erzeugt habe ich diese mit:



ausblenden C#-Quelltext
1:
2:
3:
4:
IResourceWriter writer = new ResourceWriter(@"myResources.res");
writer.AddResource(string1, "123456");
writer.Generate();
writer.Close();