AGB  ·  Datenschutz  ·  Impressum  







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

Resource "persistent" in Exe injezieren

Ein Thema von snook · begonnen am 16. Mai 2011 · letzter Beitrag vom 16. Mai 2011
Antwort Antwort
snook

Registriert seit: 25. Jun 2010
94 Beiträge
 
Delphi 2005 Professional
 
#1

Resource "persistent" in Exe injezieren

  Alt 16. Mai 2011, 20:10
hallo miteinander,

ich habe im moment ne kleine anwendung geschrieben, die mir eine resource in eine andere anwendung schreibt.
sieht i prinzip so aus:

Delphi-Quellcode:
      ExeName := OpenDialog1.FileName;
      resHandle := BeginUpdateResource(@ExeName[1],false);
      if resHandle <> 0 then
        try
          mStream.Position := 0;
          memAddr := mStream.Memory;
          ResInfo := FindResource(resHandle,PChar('Name'),RT_RCDATA);
          err := ResInfo = 0;
          if not err then
          begin
            err := not UpdateResource(resHandle,RT_RCDATA,PChar('Name'),LANG_NEUTRAL,
                                      nil,SizeOfResource(resHandle,ResInfo));
            FreeResource(ResInfo);
          end;
          err := not UpdateResource(resHandle,RT_RCDATA,PChar('Name'),LANG_NEUTRAL,
                                    mStream.Memory,mStream.Size);
          if not err then
            ShowMessage('Resource succesfully included')
          else
            MessageDlg('Error including resource to: ' + ExeName + #13 +
                       'Message: ' + sysErrorMessage(GetLastError),mtError,[mbOk],0);
        finally
          EndUpdateResource(resHandle,err);
        end
      else
        MessageDlg('Error including resource to: ' + ExeName + #13 +
                   'Message: ' + sysErrorMessage(GetLastError),mtError,[mbOk],0);
klappt auch soweit alles ganz gut. wenn diese .exe ausgeführt wird, kann sie checken ob die in "Name" angegebene resource verfügbar ist und sie gegebenenfalls laden.
mein problem ist nun aber, dass bei einer neukompilierung diese resource ja wieder abhanden kommt, sie hat ja primär erstmal nichts in der exe zu suchen.
ist es nun möglich das ganze dauerhaft zu injezieren? so dass es auch bei einer neukompilierung nicht verloren geht?
hab mir schon überlegt in der entsprechenden anwendung via {$ *.res} eine externe resourcendatei einzubinden und in diese dann die injezierte resource auch reinzuschreiben. nur, geht das überhaupt? funktioniert ein konstrukt a la:
- lade die gerade injezierte resource in einen resourcestream und speichere diesen in eine entsprechende .res datei
- benutze einen compilerschalter um zu schauen ob die resourcendatei verfügbar ist

viele grüße
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#2

AW: Resource "persistent" in Exe injezieren

  Alt 16. Mai 2011, 20:56
Ein ResourceStream hat nichts mit einer ResourceDatei zu tun.

Der TResourceStream ist ein Stream, welcher auf die Daten in einer eingebundenen/eingelinkten Resource zeigt.


Du kannst die Resource in eine .RC schreiben und dieses dann über einen Resourcen-Compiler zu einer RES umwandeln.
> siehe Hier im Forum suchenManifest-Creator ... dort mach ich sowas

Oder du suchst dir das Dateiformat der RES irgendwo und mußt dann alles selber behandeln.



Muß es denn unbedingt erst in die EXE rein?
Gleich In eine .RC, dieses zu einer .RES kompilieren lassen und
wenn Delphi dann die EXE erstellt, läßt du die RES eben mit reinlinken.

Ab Delphi 2009/2010 (glaub ich) kann man über ein Pre-Compile-Script die RC/RES auch kurz vor dem Kompilieren zusammenstellen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (16. Mai 2011 um 21:00 Uhr)
  Mit Zitat antworten Zitat
snook

Registriert seit: 25. Jun 2010
94 Beiträge
 
Delphi 2005 Professional
 
#3

AW: Resource "persistent" in Exe injezieren

  Alt 16. Mai 2011, 21:09
dank dir,
heisst das ich schreibe den stream in eine .rc?
oh, war wohl zu schnell, nee muss natürlich nciht erst in die exe rein. aber ich will halt keine fehlermeldung, wenn die .res datei nciht gefunden wird. daher hab ich es erstmal so versucht
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#4

AW: Resource "persistent" in Exe injezieren

  Alt 16. Mai 2011, 21:13
Nee, du schreibst den Stream in (irgend)eine Datei und verlinkst diese in der .RC
oder du konvertierst den Stream in ein Datenformat, welches zur Syntax der RC paßt und schreibst es direkt in die RC (siehe das Icon, welches man in meinem MC angeben kann)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (16. Mai 2011 um 21:15 Uhr)
  Mit Zitat antworten Zitat
snook

Registriert seit: 25. Jun 2010
94 Beiträge
 
Delphi 2005 Professional
 
#5

AW: Resource "persistent" in Exe injezieren

  Alt 16. Mai 2011, 21:15
ah okay dank dir. und gibt es denn nun ne möglichkeit beim kompilieren zu checken ob die .res da ist?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#6

AW: Resource "persistent" in Exe injezieren

  Alt 16. Mai 2011, 21:18
Leider nicht.
Es gibt keine Compilerschalter, über welche man das Existieren von Dateien (PAS oder RES) prüfen kann ... aber gewünscht hatte ich mir sowas auch schon.

Man kann höchstens in sowas, wie einem Pre-Compile-Script eine Dummy.res erstellen, wenn keine vorhanden ist.

Oder man erstellt sich, über die OpenToolsAPI, ein DelphiIDE-Plugin, welches sowas für einen macht.
(Dieses könnte auch PAS verändern, selbst wenn sie gerade im Codeeditor geladen sind)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 17:27 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