AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Dateien an eine exe Datei mit dranhängen
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien an eine exe Datei mit dranhängen

Ein Thema von Eagelone · begonnen am 27. Dez 2003 · letzter Beitrag vom 17. Mär 2004
Antwort Antwort
Seite 1 von 2  1 2      
Eagelone

Registriert seit: 31. Aug 2003
Ort: Augsburg
15 Beiträge
 
#1

Dateien an eine exe Datei mit dranhängen

  Alt 27. Dez 2003, 12:01
Hallo liebe Community!

Ich habe folgendes Problem:
Ich habe mir ein Programm geschrieben, was aus 2 Teilen besteht: Dem Wizard zum Erstellen von 2 Konfigurationsdateien und dem Hauptprogramm was Informationen aus den beiden Konfigurationsadateien ausliest.

Jetzt möchte ich es so machen, dass der Wizard die 2 erstellten Konfiguartionsdateien mit an die exe-Datei des Hauptprogrammes anhängt bzw. einbindet.
Weil im Moment muss ich immer alle 3 Dateien weitergeben:
Die 2 Konfigurationsdateien und das Hauptprogramm. Und das soll dann jetzt alles nur noch eine Datei sein!

Das habe ich jetzt so realisiert:
Delphi-Quellcode:
function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
  aStream: TFileStream;
  iSize: Integer;
begin
  Result := False;
  if not FileExists(AFileName) then
    Exit;
  try
    aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite);
    MemoryStream.Seek(0, soFromBeginning);
    // seek to end of File
    // ans Ende der Datei Seeken
    aStream.Seek(0, soFromEnd);
    // copy data from MemoryStream
    // Daten vom MemoryStream kopieren
    aStream.CopyFrom(MemoryStream, 0);
    // save Stream-Size
    // die Streamgröße speichern
    iSize := MemoryStream.Size + SizeOf(Integer);
    aStream.Write(iSize, SizeOf(iSize));
  finally
    aStream.Free;
  end;
  Result := True;
end;

function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
  aStream: TFileStream;
  iSize: Integer;
begin
  Result := False;
  if not FileExists(AFileName) then
    Exit;

  try
    aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
    // seek to position where Stream-Size is saved
    // zur Position seeken wo Streamgröße gespeichert
    aStream.Seek(-SizeOf(Integer), soFromEnd);
    aStream.Read(iSize, SizeOf(iSize));
    if iSize > aStream.Size then
    begin
      aStream.Free;
      Exit;
    end;
    // seek to position where data is saved
    // zur Position seeken an der die Daten abgelegt sind
    aStream.Seek(-iSize, soFromEnd);
    MemoryStream.SetSize(iSize - SizeOf(Integer));
    MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
    MemoryStream.Seek(0, soFromBeginning);
  finally
    aStream.Free;
  end;
  Result := True;
end;

procedure TForm1.SaveClick(Sender: TObject);
var
  aStream: TMemoryStream;
begin
  aStream := TMemoryStream.Create;
  Memo1.Lines.SaveToStream(aStream);
  AttachToFile('Test.exe', aStream);
  aStream.Free;
end;

procedure TForm1.LoadClick(Sender: TObject);
var
  aStream: TMemoryStream;
begin
  aStream := TMemoryStream.Create;
  LoadFromFile('Test.exe', aStream);
  Memo1.Lines.LoadFromStream(aStream);
  aStream.Free;
end;
Habe das von SwissDelphiCenter.
Ist das eine vernünfitige Lösung oder gibt es noch eine bessere?


Wenn das die Beste ist, dann folgende Fragen:
Die eine Datei von meinen beiden Konfigurationsdateien ist im Ini-Format. Da ist das Einlesen kein Problem, aber die andere Datei wird bei mir wie folgt erstellt:
Delphi-Quellcode:
 
type
  TProdukt = record
    Nummer: integer;
    Beschreibung: string[200];
    Preis: real;
  end;


   begin
      AssignFile(datei, 'test.abc'); // Dateizuweisung
      Rewrite(datei); // Erstellt die Datei
      for i := 0 to Produkte.Items.Count - 1 do // Durchläuft alle Zeilen wobei Produkte eine TListView-Komponente ist
        with Produkte.Items.Item[i] do
        begin
          datensatz.Nummer := StrToInt(Caption); // Spalte 1
          datensatz.Beschreibung := SubItems.Strings[0]; // Spalte 2
          datensatz.Preis := StrToFloat(SubItems.Strings[1]); // Spalte 3
          write(datei, datensatz); // Schreibt die Datei
        end;
      CloseFile(datei);
    end;
Und jetzt ist das Problem, wie ich die wieder einlese.
Bis her habe ich das so gemacht:

Delphi-Quellcode:
    AssignFile(datei, 'test.abc');
    Reset(datei);
    i := 0;
    while (not EOF(datei)) do
    begin
      SetLength(produkte, i + 1);
      read(datei, produkte[i]);
      cbProdukt1.Items.Add(produkte[i].Beschreibung); // cbProdukte ist jeweils eine Combobox
      cbProdukt2.Items.Add(produkte[i].Beschreibung);
      cbProdukt3.Items.Add(produkte[i].Beschreibung);
      cbProdukt4.Items.Add(produkte[i].Beschreibung);
      cbProdukt5.Items.Add(produkte[i].Beschreibung);
      inc(i);
    end;
    CloseFile(datei);
Wie kann ich nun das gleiche damit erreichen, aber so, dass die beiden Dateien trotzdem an die exe-File mit rangehängt werden?

Wie sicher sind die Daten, die ich an die exe-Datei mitranhänge?
Sollte ich die noch verschlüsseln mit RSA oder so bzw. lohnt es sich?

Kann die eigtl. exe-Datei irgendwie Schaden nehmen oder kann es da zu unerwarteten Fehlern kommen?

Hoffe, dass ihr mir helfen könnt!

Danke im Voraus!


Eagelone
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Dateien an eine exe Datei mit dranhängen

  Alt 27. Dez 2003, 12:35
Schau dir mal dazu Luckie's SFX-Tool an, das mach sowas.

Luckie's Downloadbereich -> SFXTools.zip


Aber in Blick in die DP-Suche hätte das auch schon geklärt.
Hier im Forum suchenDatei anhängen
  Mit Zitat antworten Zitat
Eagelone

Registriert seit: 31. Aug 2003
Ort: Augsburg
15 Beiträge
 
#3

Re: Dateien an eine exe Datei mit dranhängen

  Alt 27. Dez 2003, 13:20
Hi,

danke für den Tipp.

Aber irgendwie glaube ich, dass ich was anderes meine, als die Funktionen von dem SFX-Tool.
Oder irre ich mich da?

Und die DP-Suche hat mir meine Fragen nicht beantwortet.
Ich habe nämlich die SuFu vorher schon gecheckt.

Eagelone
  Mit Zitat antworten Zitat
cyberbobby

Registriert seit: 30. Dez 2003
3 Beiträge
 
Delphi 7 Professional
 
#4

Re: Dateien an eine exe Datei mit dranhängen

  Alt 30. Dez 2003, 17:00
Hi, warum machst Du Dir das Leben nicht leicht und nimmst einfach den Inno Setup Compiler und ersparst Dir das "Wizard-Selberschreiben" ?

Inno Setup 3

ciao, cyberbobby
Optimismus basiert auf einem Mangel an Information...
  Mit Zitat antworten Zitat
Eagelone

Registriert seit: 31. Aug 2003
Ort: Augsburg
15 Beiträge
 
#5

Re: Dateien an eine exe Datei mit dranhängen

  Alt 30. Dez 2003, 17:09
Der Wizard für die beiden Konfigurationsdateien und das Hauptprogramm ist ja fertig!
Ich möchte ja jetzt nur noch, dass die beiden Konfiguationsdateien nicht mit dem Programm mitgeliefert werden müssen, sondern direkt an dem Programm mit dranhängen!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Dateien an eine exe Datei mit dranhängen

  Alt 30. Dez 2003, 17:21
Das dir da jedes mal der Virenscanner sagt, das die Exe verändert wurde ist dir bewusst oder?

Aber wie dem auch sei, warum geht es denn im Prinzip nicht so, wie bei meinem SFX-Tool?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Eagelone

Registriert seit: 31. Aug 2003
Ort: Augsburg
15 Beiträge
 
#7

Re: Dateien an eine exe Datei mit dranhängen

  Alt 30. Dez 2003, 17:26
Hi Luckie!

Achso, das ist dann scheisse!

Geht das denn so, wie ich meine?
Also das mein Konfigurationsprogramm 2 Stringlisten an das Hauptprogramm dranhängt und das dann die Stringlisten auslesen kann?
  Mit Zitat antworten Zitat
cyberbobby

Registriert seit: 30. Dez 2003
3 Beiträge
 
Delphi 7 Professional
 
#8

Re: Dateien an eine exe Datei mit dranhängen

  Alt 30. Dez 2003, 17:33
Also, da Du anscheinend kein Freund von Paketen, Gepacktem oder Vorgefertigtem bist, schlage ich Dir vor - wenn es sich nicht um hochkomplexe oder generierte Konfigurationsdateien (obwohl auch das geht) handelt, die Dateien nicht mit dranzuhängen, sondern sie durch den Wizard oder das Programm beim Erststart erstellen, also schreiben zu lassen. (kleine Routine, die überprüft, ob eine eventuelle Datei schon vorhanden ist und wenn nicht, dann erstellen.)

vielleicht hilft`s

ciao, bobby
Optimismus basiert auf einem Mangel an Information...
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#9

Re: Dateien an eine exe Datei mit dranhängen

  Alt 13. Jan 2004, 09:28
ich hab sowas auch mal gemacht: Ich habe sfs-dateien an exe-dateien angehängt, das geht aber auch mit allen anderen dateien, und zwar hab ich das so gemacht:

Delphi-Quellcode:
function AppendSFSFileToExe(const aExeFile, aSFSFile, aOutFile: string): Boolean;
var
  ExeStream, SFSStream, OutStream: TFileStream;
  SizeExe, SizeSFS: LongInt;
begin
  Result := False;
  if (aSFSFile <> '') and (aExeFile <> '') then
  begin
    OutStream := TFileStream.Create(aOutFile, fmCreate);
    ExeStream := TFileStream.Create(aExeFile, fmOpenRead);
    SFSStream := TFileStream.Create(aSFSFile, fmOpenRead);

    OutStream.CopyFrom(ExeStream, ExeStream.Size);
    OutStream.CopyFrom(SFSStream, SFSStream.Size);

    SizeExe := ExeStream.Size;
    SizeSFS := SFSStream.Size;

    OutStream.Write(SizeExe, SizeOf(SizeExe));
    OutStream.Write(SizeSFS, SizeOf(SizeSFS));

    ExeStream.Free;
    SFSStream.Free;
    OutStream.Free;

    Result := True;
  end;
end;

function ExtractSFSFileFromExe(const aFileName: string): string;
var
  InStream, SFSStream: TFileStream;
  SizeExe, SizeSFS: LongInt;
  SFSFile: string;
begin
  Result := '';
  if not FileExists(aFileName) then exit;
  InStream := TFileStream.Create(aFileName, fmOpenRead);
  InStream.Position := InStream.Size - SizeOf(SizeExe) - SizeOf(SizeSFS);
  InStream.Read(SizeExe, SizeOf(SizeExe));
  InStream.Position := InStream.Size - SizeOf(SizeSFS);
  InStream.Read(SizeSFS, SizeOf(SizeSFS));
  if SizeExe + SizeSFS + SizeOf(SizeExe) + SizeOf(SizeSFS) <> InStream.Size then
    InStream.Free
  else begin
    SFSFile := utlWindows.GetTempFileName('.sfs');
    SFSStream := TFileStream.Create(SFSFile, fmCreate);
    InStream.Position := SizeExe;
    SFSStream.CopyFrom(InStream, SizeSFS);
    SFSStream.Free;
    InStream.Free;
    Result := SFSFile;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Dateien an eine exe Datei mit dranhängen

  Alt 13. Jan 2004, 09:40
Also ich hab mir für sowas eine kleine Komponente namens "TExtraResManager" gebastelt.. findet man unter www.x-spy.net/personal
Manuel Pöter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:23 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