AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi resourcen an Exe anhängen - exe danach noch in Benutzung...

resourcen an Exe anhängen - exe danach noch in Benutzung...

Ein Thema von GimbaR · begonnen am 4. Dez 2004 · letzter Beitrag vom 4. Dez 2004
Antwort Antwort
Benutzerbild von GimbaR
GimbaR

Registriert seit: 17. Apr 2004
Ort: Weltmetropole Rostock ;)
134 Beiträge
 
Delphi 2006 Professional
 
#1

resourcen an Exe anhängen - exe danach noch in Benutzung...

  Alt 4. Dez 2004, 17:12
... 'Nabend erstmal ...
Ich hab aus dem EasyDelphihelper eine Funktion, die Dateien an eine Exe-Datei anhängt.
In meinen Programm erstelle ich erst ein Zip, dann will ich es an eine Exe anbinden (mit einer bischen geänderten Funktion vom EDH, sprich: ich hab die Dateinamen geändert^^). Wenn ich die Prozedur aufrufe, die das zip erstellt und anschließen in eine Exe anhängt, kann ich die Exe nicht starten. Es kommt die Fehlermeldung, dass die Datei in benutzung ist. Wenn ich jetzt mein Programm schließe lässt sich die Exe ohne Probleme starten, auch die Dateigröße hat sich -entsprechend der Zip-größe geändert.
Mein Frage ist nun, was ich amchen kann, um die exe "freizugeben"
meine prozedur:
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var
  i: Integer;
  ZipFilename: String;
  VersionTXT: TStringList;
begin
  SaveDialog1.Filter:='SelbstAusführbare Datei (*.exe)|*.exe|Alle Dateien (*.*)|*.*';
  if SaveDialog1.Execute then //die spätere EXE-Datei
  begin
    SaveDialog1.FileName:=ChangeFileExt(SaveDialog1.FileName, '.exe'); //falls die Dateiendung nicht .exe is, wird sie dahingehend geändert
    ZipFilename:=ChangeFileExt(SaveDialog1.FileName, '.zip'); //Der Pfad der zip-datei
    if UseOwnDLLPath = true then //der Pfad der benötigten DLLs um mit DelphiZip das Zip zu erstellen
        ZipMaster1.DLLDirectory:=Form2.Edit1.Text //in Form2 is der Pfad der "eigenen" DLLs
      else ZipMaster1.DLLDirectory:=ExtractFileDir(paramstr(0)); //wenn kein eigener Pfad, dann liegen sie im Ordner, in dem mein Programm liegt
    ZipMaster1.ZipFileName:=ZipFilename; //ZipMaster1 ist die Kompo von DelphiZip; hier wird -wie man sehen kann^^- der Dateipfad zugwiesen
    for i:= 0 to ListBox1.Items.Count-1 do
      ZipMaster1.FSpecArgs.Add(ListBox1.Items[i]); // in der ListBox sind alle Dateien aufgelistet, die ins Zip müssen
    ZipMaster1.Add; //die dateien werden hinzugefügt
    if UseOwnDumpFile = true then //wenn eigene Dump-EXE (an die die dateien ran sollen)
        SetFileInDump(Form2.Edit3.Text, ZipFilename, SaveDialog1.FileName) //dann steht der pfad in der Form2 und die Zip-Datei wird an SaveDialog1.FileName angehangen
      else SetFileInDump(DefaultDumpFile, ZipFilename, SaveDialog1.FileName); // wenn nicht, liegt die Dump-EXE wieder im Ordner meinen programms und die Zip-Datei wird an SaveDialog1.FileName angehangen
  end;
  if UseFTP = true then // wenn die Exe-Datei auf nen FTP soll, wird sie jetzt hochgeladen
    begin
      IdFTP1.Host:=LabeledEdit1.Text;
      IdFTP1.Username:=LabeledEdit2.Text;
      IdFTP1.Password:=LabeledEdit3.Text;
      IdFTP1.Port:=StrToInt(Form2.LabeledEdit5.Text);
      IdFTP1.Connect;
      IdFTP1.ChangeDir(LabeledEdit4.Text);
      IdFTP1.Noop;
      IdFTP1.Put(SaveDialog1.FileName, ExtractFileName(SaveDialog1.FileName), true);
      IdFTP1.Put(ExtractFilepath(SaveDialog1.FileName) + 'version.txt', ExtractFileName(ExtractFilepath(SaveDialog1.FileName) + 'version.txt'), true);
      IdFTP1.Disconnect;
    end;
  DeleteFile(ZipFilename); //das nicht mehr benötigte Zip wird gelöscht
end;
die geänderte Funktion zum Anhängen an die Exe:
Delphi-Quellcode:
function SetFileInDump(DumpFile, AddFile, NewFile: String): Boolean;
var
  f2: file;
  aHdl: Integer;
  gelesen: LongInt;
  aBuf: Array[1..40000] of byte;
  Groesse: LongInt;
begin
  result:=false;
  CopyFile(PChar(DumpFile), PChar(NewFile), false);
  AssignFile(f2, NewFile); // die Exedatei
  Reset(f2, 1);
  Groesse:=FileSize(f2);
  CloseFile(f2);
  aHdl:=FileOpen(NewFile, fmOpenReadWrite);
  FileSeek(aHdl, Groesse, 0);
  AssignFile(f2, AddFile); // die Datei, die angehängt werden soll.
  Reset(f2,1);
  while not Eof(f2) do //EOF prüft, ob das Dateiende erreicht is.
  begin
    BlockRead(f2, abuf, sizeof(abuf), gelesen);
    FileWrite(aHdl, abuf, gelesen);
  end;
  CloseFile(f2);
  if FileExists(NewFile) then
    result:=true;
end;
mfg GimbaR
Jonas
Bei dem Tempo ist es nur noch eine Frage der Zeit bis SSchäuble verlangt allen deutschen Bürgern ein Halsband zur ständigen Überwachung zu verpassen...
  Mit Zitat antworten Zitat
Benutzerbild von GimbaR
GimbaR

Registriert seit: 17. Apr 2004
Ort: Weltmetropole Rostock ;)
134 Beiträge
 
Delphi 2006 Professional
 
#2

Re: resourcen an Exe anhängen - exe danach noch in Benutzung

  Alt 4. Dez 2004, 17:54
So, hab mal versucht meine prozedur ein wenig zu kommentieren, um den code übersichtlicher zu machen...
ich hoffe man kanns noch lesen

mfg GimbaR
Jonas
Bei dem Tempo ist es nur noch eine Frage der Zeit bis SSchäuble verlangt allen deutschen Bürgern ein Halsband zur ständigen Überwachung zu verpassen...
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:36 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