Aktualisieren von Bildern im Ressourcenbereich einer Exe (in c # / C)

8

Ich habe einige Bilder in meine ausführbare Datei im Ressourcenbereich eingebettet. Ich habe diese Schritte ausgeführt, um meine ausführbare Datei zu erstellen:

  1. Generierte RESX-Datei für alle Bilder (.jpg) in einem Verzeichnis unter Verwendung eines Dienstprogramms. Die Bilder heißen image1.jpg, image2.jpg und so weiter.
  2. erstellte .resources-Datei aus RESX-Datei mit: resgen myResource.resx
  3. Eingebettete .resource-Datei mit dem Flag / res als csc file.cs /res:myResource.resources

4 Ich greife auf diese Bilder wie folgt zu:

%Vor%

Das alles funktioniert wie erwartet. Jetzt möchte ich eingebettete Bilder in einige neue Bilder ändern. Das mache ich gerade:

%Vor%

Der obige Code fügt eine neue Ressource für das angegebene Bild hinzu (in IMAGE title mit einer Zufallszahl, wie in Resource hacker zu sehen), aber ich möchte die vorhandenen Ressourcendaten für image1 ändern.

Ich bin sicher, dass ich UpdateResource mit einigen ungültigen Argumenten anrufe.

Könnte jemand helfen, dies herauszuzeigen?

Ich verwende .NET Version 2

Danke,

Vikram

    
Vikram.exe 19.02.2012, 13:54
quelle

3 Antworten

8

Ich denke, Sie machen eine Verwirrung zwischen .NET-Ressourcen und Win32-Ressourcen. Die Ressourcen, die Sie hinzufügen, indem Sie das /res -Argument in csc.exe einbetten, sind .NET-Ressourcen, die Sie mit Ihrem ResourceManager -Snippet-Code erfolgreich lesen können.

Win32-Ressourcen sind ein weiteres Biest, das mit der verwalteten .NET-Welt im Allgemeinen nicht viel "kompatibel" ist, obwohl Sie sie tatsächlich mit dem /win32Res -Argument zu einer .NET-Exe hinzufügen können - beachten Sie den feinen Unterschied :-)

Nun, wenn Sie eingebettete .NET-Ressourcen ändern wollen, denke ich nicht, dass es Klassen gibt, die es im Framework selbst machen, aber Sie können das Mono.Cecil Bibliothek statt. Es gibt ein Beispiel, das dies hier demonstriert: C # - Wie Ressource eines zu bearbeiten Montage?

Und wenn Sie eingebettete Win32-Ressourcen ändern wollen, benötigt Ihr Code einige Korrekturen, hier ist eine leicht modifizierte Version davon, der wichtigste Unterschied liegt in der Deklaration von UpdateResource :

%Vor%     
Simon Mourier 25.02.2012, 18:35
quelle
1

Das ist unmöglich. Sie können die kompilierte Datei, die Sie ausführen, nicht ändern.

    
Kamil 19.02.2012 13:57
quelle
0

Ich glaube, dass Sie neue Bilder zur Laufzeit hinzufügen können, aber eine Ressource, die im Wesentlichen nur im Speicher gehalten wird, nicht aktualisieren können.

Wenn Sie eine Ressource zur Laufzeit hinzufügen, existiert sie, aber ich denke nicht, dass sie kompiliert ist und daher glaube ich nicht, dass Sie darauf zugreifen können.

Gibt es einen Grund, warum Sie nicht stattdessen Inhalte verwenden?

    
jwddixon 28.02.2012 15:34
quelle

Tags und Links