Frage

Ich möchte einige XML -Programmpräferenzen als Ressource in einer Delphi -Anwendung speichern. Die Ressource würde basierend auf Benutzernänderungen geändert. Ich habe kein Problem damit, das XML zu erstellen und sie als Ressource zu laden, und kann das XMLDOCument, in das ich lade, ändern, aber ich weiß nicht, wie das Dokument zurückgeschrieben wird. Ist das überhaupt möglich? Ich würde es vorziehen, am Ende nicht 2 Dateien zu erhalten (.exe und .xml).

War es hilfreich?

Lösung

Die Antwort lautet sowohl Ja als auch nein.

Ja, es ist möglich, Ressourcen in einer Binärdatei mithilfe von Windows -API -Routinen zu aktualisieren. Dieser Link zu BeginnUpdateresource () Sollte Sie in dieser Punktzahl auf den richtigen Weg bringen.

Sie werden jedoch die folgende Bedingung zur Verwendung von beginUpDateresource () feststellen:

"Die Binärdatei, in der Ressourcen aktualisiert werden sollen. Eine Anwendung muss in der Lage sein, Schreibzugriffe für diese Datei zu erhalten. Die von PFileName verwiesene Datei kann derzeit nicht ausgeführt werden."

Mit anderen Worten, es ist nicht möglich, dass eine Anwendung ihre eigenen Ressourcen während des Ausführens einfach aktualisiert.

Es gibt eine Reihe von Strategien, die Sie anwenden könnten, um das zu erreichen, was Sie wollen - oder etwas, das nahe genug ist, um zufriedenstellend zu sein. Was am besten geeignet ist, hängt von Ihren genauen Bedürfnissen ab.

Von der Vielzahl von Lösungen könnten zwei sein:

1) Verwalten Sie alle diese Ressourcen in einer DLL (Ressource nur DLL - enthält keinen tatsächlichen Code als solcher), den Sie nur öffnen, wenn Sie Ressourcen speziell geladen (oder aktualisieren). Zum Zeitpunkt, an dem Sie eine Ressource an die DLL zurückschreiben möchten, sollten Sie in der Lage sein, den erforderlichen Schreibgeschoss zu erhalten.

oder

2) Wenn Sie eine Ressource aktualisieren müssen, um das aktuelle ausgeführte EXE in so etwas wie "myapp.old" umzubenennen, kopieren Sie sie so, dass Sie eine neue Datei mit dem aktuellen Namen "myapp.exe" haben. Sie können dann "myapp.exe" aktualisieren, weil es tatsächlich "myapp.old" ist, das ausführt.

Dieser zweite Ansatz ist ziemlich chaotisch und hat einen "bösen Geruch", ist jedoch eine Technik, die beispielsweise von Auto-Updatern häufig verwendet wird. Offensichtlich beinhaltet ein Neustart Ihrer App irgendwann, wenn der aktuelle laufende Code die aktualisierten Ressourcen im geänderten EXE nutzen soll, sodass dies möglicherweise nicht Ihren Anforderungen angemessen ist.

Andere Tipps

Etwas anderes zu berücksichtigen ist, dass die Anti-Virus-Software die Aktivität als misstrauisch bezeichnen kann.

Nachdenke über die Antwort von Deltics Ich dachte, Sie könnten auch eine Konsolenanwendung erstellen, die Ihre Ressource an das Haupt -Exe zurückschreibt. Daher speichert Ihr Haupt -Exe seine Änderungen in einer Datei und extrahiert auch die Konsolen -App. Wenn die Hauptanwendung beendet wird, ruft sie die Konsolen -App auf. Die Konsolen -App wartet einen kurzen Zeitraum und bindet dann die Ressourcendatei an die ausführbare Hauptdatei, löscht die Ressourcendatei und sich selbst. Die Konsolen -App könnte einen Scheck durchführen, um sicherzustellen, dass die Ressourcendatei erfolgreich geschrieben wurde und die Ressourcendatei geöffnet bleibt. In der Hauptausführung kann die Ressourcendatei beim Start angezeigt und anstelle der eingebetteten Datei als Sicherheitsdatei verwendet werden.

All dies setzt eine einzelne Benutzeranwendung voraus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top