![]() |
resourcen an Exe anhängen - exe danach noch in Benutzung...
... '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" :roll: meine prozedur:
Delphi-Quellcode:
die geänderte Funktion zum Anhängen an die Exe:
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;
Delphi-Quellcode:
mfg GimbaR
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; |
Re: resourcen an Exe anhängen - exe danach noch in Benutzung
So, hab mal versucht meine prozedur ein wenig zu kommentieren, um den code übersichtlicher zu machen...
ich hoffe man kanns noch lesen mfg GimbaR |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 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