Wie Ersetze ich eingebettete Ressourcen .NET-assembly programmgesteuert?

Ich versuche, ersetzen Sie eine Ressource von einer exe-Datei(.NET, C#) - Datei mithilfe von C# - code.

Habe ich gefunden dieser Artikel und machte diesen code (mit Mono.Cecil 0.6):

AssemblyDefinition asdDefinition = AssemblyFactory.GetAssembly("C:\\File.exe");
EmbeddedResource erTemp = new EmbeddedResource("encFile", ManifestResourceAttributes.Public);
erTemp.Data = myNewFileBytes;
asdDefinition.MainModule.Resources.RemoveAt(0);
asdDefinition.MainModule.Resources.Add(erTemp);
AssemblyFactory.SaveAssembly(asdDefinition, "C:\\newFile.exe");

Wird der code tatsächlich entfernen Sie die Ressource aus und fügt dann einen neuen mit dem gleichen Namen.
Der Ressourcenname ist encFile und gespeichert encFile.exe (beides ausprobiert).

Getestet habe ich den code und das entfernen funktioniert (ich kann sagen, durch die Größe der Datei) und dem hinzufügen zu, aber die neue Datei crash wie die Datei, die ich erstellt mit dem entfernen, nur (für die Prüfung) - es verhält sich wie er kann nicht sehen, die ersetzt Ressource.

Was kann ich tun, um es zu beheben up? vielleicht sind einige änderungen in der bearbeiteten EXE-Datei?
die EXE-Datei zu Lesen, müssen die Ressourcen auf diese Weise:
byte[] buffer = ProjectName.Properties.Resources.encFile;

  • Was ist dein Ziel mit diesem? Warum haben Sie, dies zu tun, anstatt einfach mit den Einstellungen?
  • Ich möchte das ändern dieser Ressource, ohne sich in das Visual Studio.
  • gleiche ich glaube, ich fragte, stackoverflow.com/questions/6757457/...
  • nicht die gleichen. Hier habe ich einen code, eigentlich sollte die Arbeit zu tun, aber es funktioniert nicht.
  • Sind Sie sicher, dass der name der Ressource ist genau das gleiche? ("encFile") Versuchen, die Prüfung der Ressourcen der Versammlung in den debugger zu 100% sicher sein, Sie haben die richtigen Namen.
  • ja, weil ProjectName.Properties.Resources.encFile ist, wie bekomme ich den die Datei in der EXE-Datei..
  • könnten Sie etwas konkreter als «die Datei " abstürzt»? Ich schlage vor, Sie bewerben Kragen Beratung und überprüfen Sie, ob die Ressource am index 0 hat für name encFile, und nicht sowas wie Projektname.encFile. Der einfachste Weg ist einfach zu ändern, die Daten der Ressource, die am index 0 (Sie haben zu werfen es zu EmbeddedResource), anstatt einen neuen zu erstellen. Auch ich empfehle, dass Sie das update auf die Cecil 0.9.x.
  • 2 Dinge in den Sinn kommen. Die Ziel-assembly, starken Namen signiert oder cecil bricht die Versammlung. Ohne mehr Informationen, das ist schwer zu sagen, was genau.
  • Die Anpassung ein .exe-Datei ist das wirklich das, was Sie wollen? Aus Gründen der Sicherheit für Ihr Virenscanner blockieren sollte, die! Und auch: innerhalb der Windows-Umgebung Ihr Programm nicht erlaubt ist zu schreiben eine Datei in den Ordner "Programme". Bitte überdenken Sie, ob es ist eine gute übung oder nicht.
  • Ist die Versammlung unterschrieben? Wenn es dann funktioniert dies nicht, durch design.

InformationsquelleAutor eranj | 2011-08-03
Schreibe einen Kommentar