AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

UpdateResource (XML)

Ein Thema von DeddyH · begonnen am 29. Mär 2017 · letzter Beitrag vom 31. Mär 2017
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#1

UpdateResource (XML)

  Alt 29. Mär 2017, 17:10
Ich habe eine Exe, die ich durch eine andere Exe konfigurieren möchte. Als Konfigurationsformat verwende ich XML, welches ich dann in die zu konfigurierende Exe packe. Soweit, so gut, funktioniert auch vordergründig. Nun habe ich evtl. auch noch Binärgedöns (z.B. Grafiken). Also dachte ich mir, das kann ja mit in die XML, einfach Base64-kodieren und feddich is der Lack. Das klappt aber überhaupt nicht, nach EndUpdateResource ist die Exe inne Futt, wie der Sauerländer sagt. Da ich die XML auch noch zwecks späterer Verwendung auf der Festplatte ablege, hab ich mir flugs den ResourceHacker geschnappt und sie dann damit eingefügt, das funktioniert. Hier mein Code:
Delphi-Quellcode:
  Stream := TMemoryStream.Create;
  try
    XML.SaveToStream(Stream);
    ResHandle := BeginUpdateResource(PChar(Filename), false);
    if ResHandle <> 0 then
      try
        Success := UpdateResource(ResHandle, RT_RCDATA, 'config', MakeLangID(LANG_NEUTRAL, SUBLANG_DEFAULT), Stream.Memory, Stream.Size);
      finally
        EndUpdateResource(ResHandle, not Success);
      end;
  finally
    Stream.Free;
  end;
Hat jemand eine Idee, was ich falsch mache? Hülfee!!!einseinself
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: UpdateResource (XML)

  Alt 29. Mär 2017, 17:40
Kämpfe immer wieder mit Stream, meist hilft sowas:
Delphi-Quellcode:
XML.SaveToStream(Stream);
Stream.Position := 0;
Nach dem SaveToStream ist dessen Position (vermutlich) immer am Ende des Streams und von der Position aus wird dann weiter gearbeitet. Das dürfte dann hier bei UpdateResource ziemlich in die Hose gehen.

Ist jetzt mal so vermutet
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: UpdateResource (XML)

  Alt 29. Mär 2017, 17:44
Das hatte ich auch schon versucht, leider war es das nicht. Trotzdem Danke.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: UpdateResource (XML)

  Alt 29. Mär 2017, 18:55
Mir sind noch zwei Dinge zu UpdateResource aufgefallen. Sie lösen das Problem zwar nicht, aber vielleicht geht es in die Richtung:

Die Doku zu den letzten beiden Parametern sagt:
Zitat:
lpData [in, optional]
Type: LPVOID

The resource data to be inserted into the file indicated by hUpdate. If the resource is one of the predefined types, the data must be valid and properly aligned. Note that this is the raw binary data to be stored in the file indicated by hUpdate, not the data provided by LoadIcon, LoadString, or other resource-specific load functions. All data containing strings or text must be in Unicode format. lpData must not point to ANSI data.

If lpData is NULL and cbData is 0, the specified resource is deleted from the file indicated by hUpdate.
cbData [in]
Type: DWORD

The size, in bytes, of the resource data at lpData.
1) Strings müssen zwingend Unicode sein. Ich habe es versucht, macht keinen Unterschied.
2) Die Größe des Streams nimmt ein DWORD auf, TStream.Size ist aber ein Int64. Also aufpassen dass du nicht mehr alsa 4GB reinstecken willst

Ich sehe nur dass es mit kleinen Dateien funktioniert, will ich eine 5-10 MB große Textdatei reinstecken, ist die exe kaputt.

Hier brabbelt jemand etwas von einem angeblich sehr kleinen Limit, aber das kann doch nicht sein?
http://stackoverflow.com/q/25748057/2298252
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: UpdateResource (XML)

  Alt 29. Mär 2017, 19:01
Danke, den Thread hatte ich auch schon gelesen, außerdem sagt da ja auch jemand, dass er es mit 5000 Zeichen ohne Probleme hinbekommen hat. Nach meiner Kenntnis gibt es kein festes Limit für RT_RCDATA und wie gesagt, mit dem ResourceHacker geht es ja. Ich muss irgendwo einen blöden Fehler machen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: UpdateResource (XML)

  Alt 31. Mär 2017, 09:18
Update: in einem Foreneintrag von 2003 hat Mathias Rauen (madExcept) geschrieben, dass UpdateResource gern einmal die Delphi-Kompilate mit Debug-Infos zerhaut. Also habe ich beide Exen einmal in der Release-Konfiguration erstellt. Damit scheint es zu funktionieren

There must man first once upon come.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: UpdateResource (XML)

  Alt 31. Mär 2017, 09:31
Ich habe es natürlich auch mit einer Delphi-Exe mit Debug-Infos versucht, das erklärt das wohl
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: UpdateResource (XML)

  Alt 31. Mär 2017, 09:35
Dachte ich mir, kann ja auch keiner ahnen. Danke fürs Nachvollziehen
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz