Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Exe aus Ressoruce extrahieren (https://www.delphipraxis.net/44826-exe-aus-ressoruce-extrahieren.html)

Aljoscha 25. Apr 2005 14:14


Exe aus Ressoruce extrahieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi.
Ich versuche verzweifelt eine Ressource (exe Datei) zu extrahieren.
Ist ein simples Testprogramm das keine andere Funktion hat.
Ich habe es angehängt, weil es einfach nicht klappen will.
Die Ressource kann NIE gefunden werden, egal was ich angebe.

Delphi-Quellcode:
Var
 MeinFileStream: TFileStream;
 RS: TResourceStream;
begin
SaveDialog1.Execute;

 RS := TResourceStream.Create(
   Form1.Handle,    // Handle deiner Anwendung/DLL
   '1', // Name der Ressource
   RT_RCDATA);   // in diesem Fall ist es ein RCDATA resource type

 MeinFileStream:=TFileStream.Create(SaveDialog1.FileName, fmCreate);
 MeinFileStream.CopyFrom(RS, RS.Size);
 MeinFileStream.Free;
Die Ressource 1 kann nie gefunden werden.
Wäre nett wenn jemand mein Beispiel im Anhang korrigieren könnte.

thx 4 help

3_of_8 25. Apr 2005 14:18

Re: Exe aus Ressoruce extrahieren
 
Ich kenn mich damit nicht so aus, aber vielleicht:

Application.Handle

statt

Form1.Handle

?

teebee 25. Apr 2005 14:20

Re: Exe aus Ressoruce extrahieren
 
'hInstance' statt Form.Handle könnte funktionieren,

Gruß, teebee

Aljoscha 25. Apr 2005 19:20

Re: Exe aus Ressoruce extrahieren
 
Nein beides schon probiert :(
Scheint nicht am Quellcode zu liegen.
Wäre nett wenn jemand sich den Anhang mal angucken könnte :)
thx

Jens Schumann 25. Apr 2005 19:27

Re: Exe aus Ressoruce extrahieren
 
Hallo,
probier es mal damit.
Delphi-Quellcode:
...
var
  Path : String;
  aRes : TResourceStream;
begin
  Path:=ExtractFilePath(Application.ExeName);
  Path:=IncludeTrailingBackSlash(Path);
  aRes:=TResourceStream.Create(hInstance,'MYEXE','EXEDATA');
  Try
    aRes.SaveToFile(Path+'test.exe');
    ShellExecute(Handle,'open',PChar(Path+'test.exe'),Nil,Nil,SW_SHOW);
  Finally
    aRes.Free;
    end;
end;
Code ist getestet und funktioniert

Hier die Resourcendatei
Code:
MYEXE EXEDATA "test.exe"

Aljoscha 25. Apr 2005 19:32

Re: Exe aus Ressoruce extrahieren
 
WUNDERBAR!
ICh hatte schon so gut wie aufgegeben :)
Vielen Dank dir!

ferby 22. Mai 2005 17:40

Re: Exe aus Ressoruce extrahieren
 
Hallo,

ich habe es bis jetzt auch nicht zusammengebracht eine datei aus dem res der exe zu extrahieren.

ich habe den Quellcode ausprobiert, bei mir kommen die fehler:

[Warnung] Unit1.pas(33): Symbol 'IncludeTrailingBackslash' ist plattformspezifisch
[Fehler] Unit1.pas(37): Undefinierter Bezeichner: 'ShellExecute'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden



kann mir da wer weiter helfen?

MathiasSimmack 22. Mai 2005 17:43

Re: Exe aus Ressoruce extrahieren
 
Zitat:

Zitat von ferby
[Warnung] Unit1.pas(33): Symbol 'IncludeTrailingBackslash' ist plattformspezifisch

Liegt nur an deinem Delphi. Kannst du ignorieren, wenn dein Programm eine Win32-Exe bleiben soll. Die Warnung ist so ein "Vorgeschmack" auf .NET. ;)

Zitat:

[Fehler] Unit1.pas(37): Undefinierter Bezeichner: 'ShellExecute'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
Delphi-Quellcode:
uses
  ShellAPI;

mirage228 22. Mai 2005 17:44

Re: Exe aus Ressoruce extrahieren
 
Zitat:

Zitat von MathiasSimmack
Zitat:

Zitat von ferby
[Warnung] Unit1.pas(33): Symbol 'IncludeTrailingBackslash' ist plattformspezifisch

Liegt nur an deinem Delphi. Kannst du ignorieren, wenn dein Programm eine Win32-Exe bleiben soll. Die Warnung ist so ein "Vorgeschmack" auf .NET. ;)

In diesem Fall hat die Warnung nichts mit .NET zu tun, sondern mit der Linux Kompatibilität (Sprichwort: CLX) der VCL/RTL ab Delphi 6.
Edit: Es hindert aber Niemand einen daran, die Methode Delphi-Referenz durchsuchenIncludeTrailingPathDelimiter zu verwenden, die dann auch mit der CLX und Linux kompatibel ist. ;)

mfG
mirage228

Jens Schumann 22. Mai 2005 17:46

Re: Exe aus Ressoruce extrahieren
 
Zitat:

Zitat von ferby
Hallo,

ich habe es bis jetzt auch nicht zusammengebracht eine datei aus dem res der exe zu extrahieren.

ich habe den Quellcode ausprobiert, bei mir kommen die fehler:

[Warnung] Unit1.pas(33): Symbol 'IncludeTrailingBackslash' ist plattformspezifisch
[Fehler] Unit1.pas(37): Undefinierter Bezeichner: 'ShellExecute'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden



kann mir da wer weiter helfen?

Ich verwende immer noch D5. Da ist IncludeTrailingBackslash noch Ok. Ab D6 steht in der OH, dass man
IncludeTrailingPathDelimiter verwenden sollte.

MathiasSimmack 22. Mai 2005 18:12

Re: Exe aus Ressoruce extrahieren
 
Zitat:

Zitat von mirage228
In diesem Fall hat die Warnung nichts mit .NET zu tun, sondern mit der Linux Kompatibilität (Sprichwort: CLX) der VCL/RTL ab Delphi 6.

Okay, mein Fehler. :stupid:

ferby 22. Mai 2005 19:02

Re: Exe aus Ressoruce extrahieren
 
Hallo,

jetzt funktionierts bei mir,
ich habe eine Frage:
Was ist wenn ich nicht eine exe Datei sondern eine bellibige Datei aus dem ressource extrahieren will,
was muss ich da ändern?

Sobald es keine exe mehr ist findet er die ressource nicht mehr......

könnt ihr mir weiterhelfen?


ferby

ferby 22. Mai 2005 19:19

Re: Exe aus Ressoruce extrahieren
 
Hallo,

ich verstehs nicht, wenn ich die datei z.b: eine txt datei als EXEDATA definiere dann gehts aber wenn ich rcdata verwende dann nicht, warum????


ferby

MathiasSimmack 22. Mai 2005 19:29

Re: Exe aus Ressoruce extrahieren
 
Ich kann dir nicht ganz folgen. Hast du diese Textdatei denn auch in der Ressourcendatei als "RC_DATA" deklariert? Oder steht dort immer noch "EXEDATA". Es muss schon beides zusammenpassen.

ferby 22. Mai 2005 19:39

Re: Exe aus Ressoruce extrahieren
 
Hallo,

nein dort habe ich es auch geändert. Ich verstehe es auch nicht ganz.....
aber es ist egal, es funktioniert mit exedata so wie ich will, wo ist eigentlich der unterschied ob ich exedata oder rc_data nehme??
denn bei mir geht mit exedata jede datei.......

??


ferby

marabu 22. Mai 2005 19:50

Re: Exe aus Ressoruce extrahieren
 
RC_DATA ist ein definierter Resourcen-Typ (siehe MS PSDK), EXEDATA ist ein custom resource type - du kannst an der Stelle jeden nicht vordefinierten Namen verwenden.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 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