Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Resourcendatei zur Laufzeit erzeugen und an eine bestehende (https://www.delphipraxis.net/100984-resourcendatei-zur-laufzeit-erzeugen-und-eine-bestehende.html)

napsterxx 6. Okt 2007 15:35


Resourcendatei zur Laufzeit erzeugen und an eine bestehende
 
Ich, ich möchte mit klick auf einen Button, eine beliebige Datei als Resourcendatei an eine bestehende EXE Datei hängen, sodass wenn diese EXE Datei ausgeführt wird die Resourcendatei wo abgespeichert werden kann. Ich weiß wie ich Resourcen abspeicher, bloß nicht wie ich eine Datei zur Laufzeit als Resourcendatei an eine andere hänge. Pls Help ;)

DeddyH 6. Okt 2007 16:20

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Das Hauptproblem sehe ich schon einmal darin, dass Du einen Ressourcen-Compiler bräuchtest.

napsterxx 6. Okt 2007 16:22

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Delphi-Quellcode:
h := BeginUpdateResource(exedatei,TRUE);
UpdateResource(h,RT_RCDATA, 'text', 'RCDATA','C:\textfile.txt',340);
EndUpdateResource(h,FALSE);
Angeblich soll das funktionieren, aber ich bekomme ständig ne fehlermeldung die typen seien falsch ...

napsterxx 6. Okt 2007 18:04

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
*möp* wo bleiben die Leute mit den Antworten? *g*

DeddyH 6. Okt 2007 18:10

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Lies doch mal die Hilfe. :warn:

Zitat:

Zitat von Win32-API Hilfe
The UpdateResource function adds, deletes, or replaces a resource in an executable file.

BOOL UpdateResource(

HANDLE hUpdate, // update-file handle
LPCTSTR lpType, // address of resource type to update
LPCTSTR lpName, // address of resource name to update
WORD wLanguage, // language identifier of resource
LPVOID lpData, // address of resource data
DWORD cbData // length of resource data, in bytes
);


Parameters

hUpdate

Specifies an update-file handle. This handle is returned by the BeginUpdateResource function.

lpType

Points to a null-terminated string specifying the resource type to be updated. This parameter can also be an integer value passed to the MAKEINTRESOURCE macro, or it can be one of the following predefined resource types:

Value Meaning
RT_ACCELERATOR Accelerator table
RT_ANICURSOR Animated cursor
RT_ANIICON Animated icon
RT_BITMAP Bitmap resource
RT_CURSOR Hardware-dependent cursor resource
RT_DIALOG Dialog box
RT_FONT Font resource
RT_FONTDIR Font directory resource
RT_GROUP_CURSOR Hardware-independent cursor resource
RT_GROUP_ICON Hardware-independent icon resource
RT_ICON Hardware-dependent icon resource
RT_MENU Menu resource
RT_MESSAGETABLE Message-table entry
RT_RCDATA Application-defined resource (raw data)
RT_STRING String-table entry
RT_VERSION Version resource


lpName

Points to a null-terminated string specifying the name of the resource to be updated. This parameter can also be an integer value passed to the MAKEINTRESOURCE macro.

wLanguage

Specifies the language identifier of the resource to be updated. For a list of the primary language identifiers and sublanguage identifiers that make up a language identifier, see the MAKELANGID macro

lpData

Points to the resource data to be inserted into the executable file. 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 stored in the executable file, 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, the specified resource is deleted from the executable file.

cbData

Specifies the size, in bytes, of the resource data at lpData.



Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

An application can use UpdateResource repeatedly to make changes to the resource data. Each call to UpdateResource contributes to an internal list of additions, deletions, and replacements but does not actually write the data to the executable file. The application must use the EndUpdateResource function to write the accumulated changes to the executable file.


napsterxx 6. Okt 2007 18:17

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
:wall: bitte bitte kläre mich auf^^ ich habs bitter nötig ;)

DeddyH 6. Okt 2007 18:26

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Delphi-Quellcode:
UpdateResource(h,RT_RCDATA, 'text', 'RCDATA','C:\textfile.txt',340);
Du müsstest die einzufügenden Ressourcen ja erst einmal in den Speicher laden (einen Dateinamen anzugeben macht ja wenig Sinn). Außerdem steht der 4. Parameter für die Sprache, da passt 'RCDATA' nicht ;). Das Folgende hab ich nicht getestet, hoffe aber, dass es so geht.
Delphi-Quellcode:
var sl: TStringList;
    h: THandle;
begin
  sl := TStringList.Create;
  try
    sl.LoadFromFile('C:\textfile.txt');
    h := BeginUpdateResource(PChar(Dateiname),false);
    try
      UpdateResource(h,RT_RCDATA,'text',LANG_NEUTRAL,@sl.Text[1],Length(sl.Text));
    finally
      EndUpdateResource(h,false);
    end;
  finally
    FreeAndNil(sl);
  end;
end;

napsterxx 6. Okt 2007 18:32

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
^^ Irgendwie nicht^^ bei dem Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var sl: TStringList;
    h: THandle;
begin
  sl := TStringList.Create;
  try
    sl.LoadFromFile('C:\main.exe');
    h := BeginUpdateResource(PChar(Application.ExeName),false);
    try
      UpdateResource(h,RT_RCDATA,'text',LANG_NEUTRAL,@sl.Text[1],Length(sl.Text));
    finally
      EndUpdateResource(h,false);
    end;
  finally
    FreeAndNil(sl);
  end;
end;
wird eine RCX16.tmp erzeugt ...^^

DeddyH 6. Okt 2007 18:34

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Du willst main.exe in eine Stringliste laden?

napsterxx 6. Okt 2007 18:35

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Upsi ^^ :duck:

^^ ich will ne exe reinladen hehe

Ich galube bei na exe muss ich das doch irgendiw mit denm Stream machen doer so...^^

DeddyH 6. Okt 2007 18:45

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Mal ganz abgesehen davon:
Zitat:

Zitat von Win32 API-Hilfe
The BeginUpdateResource function returns a handle that can be used by the UpdateResource function to add, delete, or replace resources in an executable file.

HANDLE BeginUpdateResource(

LPCTSTR pFileName, // pointer to file in which to update resources
BOOL bDeleteExistingResources // deletion option
);


Parameters

pFileName

Pointer to a null-terminated string that specifies a Windows executable file in which to update resources. An application must be able to obtain write access to this file; it cannot be currently executing. If pFileName does not specify a full path, Windows searches for the file in the current directory.

bDeleteExistingResources

Specifies whether to delete the pFileName parameter's existing resources. If this parameter is TRUE, existing resources are deleted and the updated executable file includes only resources added with the UpdateResource function. If this parameter is FALSE, the updated executable file includes existing resources unless they are explicitly deleted or replaced by using UpdateResource.



Return Values

If the function succeeds, the return value is a handle that can be used by the UpdateResource and EndUpdateResource functions. The return value is NULL if the specified file is not an executable file, the executable file is already loaded, the file does not exist, or the file cannot be opened for writing. To get extended error information, call GetLastError.

Es dürfte also schwierig werden, die eigene Exe zu ändern.

napsterxx 6. Okt 2007 18:52

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
ne moment ich will keine exe ändern ich will was dran hängen^^ alsook das ist ändern aber halt nicht im sinne von ändern ;) (blickste noch durch?)
Ich will mit einem Programm
"Exe1" die Datei "Exe2" an die Datei "Exe3" anhängen. Sry das ich mich so schlecht ausdrücke :(

DeddyH 6. Okt 2007 19:07

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Hmmm... ja, da wirst Du wohl um Streams nicht herumkommen. Leider habe ich im Moment keine Idee, wie man die Speicheradresse eines Streams angibt (@Stream?, keine Ahnung), der Rest wäre ja zu schaffen. Probier halt mal ein bisschen rum, ich gehe nun gleich off (Sicherungskopien aber nicht vergessen ;)).

napsterxx 6. Okt 2007 19:10

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
^^ hehe Danke dir soweit schonmal also mit den Stream des verschiebe ich dann mal ;)

Muetze1 6. Okt 2007 19:10

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Schaut mal in die Hilfe zu Delphi-Referenz durchsuchenTMemoryStream und dort dann speziell die Eigenschaft Delphi-Referenz durchsuchenTMemoryStream.Memory

turboPASCAL 6. Okt 2007 19:17

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Wenn du eine Exe an eine Exe und die dann noch an eine Exe machst, wass soll 'n das werden?
Hätte ich so ein Teil auf meiner Festplatte würde ich sie nicht nur mit einem Auge be-
obachten sondern mit zwei. Die Vierenverdächtigkeit läge dann bei 99.895 %. :mrgreen:

napsterxx 7. Okt 2007 16:35

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
ne ich will kein virus machen. ich will eine exe an ne andere hängen. das soll ne updater sein. aber die exe wird halt (also der updater) wird immer erneuert. deshalb muss ich nach jedem update die neu dra hängen

DeddyH 7. Okt 2007 16:38

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Was spricht da gegen ein SFX-Modul?

napsterxx 7. Okt 2007 16:46

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
das is doch von winRAR oder? selbstentpackendes archiev. spricht nix dagegen bloß ich will ja den geupdateten updater wieder an die exe hängen, dann müsste ich das ja irgendwie mit winrar wiedermachen und wie bringe ich meinem programm das bei?

DeddyH 7. Okt 2007 16:49

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Das SFX-Modul entpackt Deine Dateien und startet anschließend den Updater. Ich sehe da nun nicht das ganz große Problem.

napsterxx 7. Okt 2007 16:57

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
OK also muss ich die erst packen. so das habe ich jetzt gemacht. Updater wird gestartet aber wie bekomme ich es wieder in eine exe als en packet?

DeddyH 7. Okt 2007 16:58

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Sry, ich verstehe nicht ganz, was Du willst.

napsterxx 7. Okt 2007 17:08

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Kurz und Knapp:
Ich möchte ein Programm, was:
Eine Exe Datei (Updater) an ein bestehendes Programm anfügt (Media Player)

Wird der Media Player gestartet wird der Updater von dem Media Player "gelöst" und gestartet. Dieser sucht nach Updates. Findet er welche, so Downloadet er diese, mit einem Programm, was den neuen Media Player mit dem Updater verschmiltzt.

DeddyH 7. Okt 2007 17:11

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Ist der Mediaplayer von Dir?

napsterxx 7. Okt 2007 17:13

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Jop,
okok klar ich könnte den Updater auch direkt in den Player einbauen, möchte ich aber nicht! Ich will es genau so wie oben beschrieben mahen. Nicht anders. :)

DeddyH 7. Okt 2007 17:22

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Hmm... find ich aber ein bisschen von hinten durch die Brust ins Auge.

napsterxx 7. Okt 2007 17:29

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
;) bin halt so. Ich habe mir da vorgenommen und möchte es auch so umsetzen. gibt es dar keine fertige funktion?

DeddyH 7. Okt 2007 17:42

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Das ist etwas zu speziell für eine fertige Funktion, findest Du nicht? ;)

napsterxx 7. Okt 2007 17:46

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
mh joa ... also kann ichs dann vergessen :(? oder geht das echt nich?

DeddyH 7. Okt 2007 17:52

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Was soll nicht gehen? Dass ein Programm einen Teil von sich selbst abspaltet und als Datei speichert?

napsterxx 7. Okt 2007 18:02

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Zitat:

Zitat von napsterxx
Kurz und Knapp:
Ich möchte ein Programm, was:
Eine Exe Datei (Updater) an ein bestehendes Programm anfügt (Media Player)

Wird der Media Player gestartet wird der Updater von dem Media Player "gelöst" und gestartet. Dieser sucht nach Updates. Findet er welche, so Downloadet er diese, mit einem Programm, was den neuen Media Player mit dem Updater verschmiltzt.

Ja das ist wohl nich möglich oder?...

DeddyH 7. Okt 2007 18:11

Re: Resourcendatei zur Laufzeit erzeugen und an eine bestehe
 
Wenn Du genau weißt, ab welchem Byte innerhalb Deiner Exe sich die angehängte Exe befindet, ginge das schon.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz