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:
resgen myResource.resx
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
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
:
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?