![]() |
Re: Buttonklick und Programm neustarten [Hilfe]
Moin Ken,
Zitat:
Welches Betriebssystem verwendest Du? Du kannst die Datei eines laufenden Programmes nicht löschen bzw. überschreiben. Da aber der Dateiname nichts mit dem Dateiinhalt zu tun hat, und eben hier der schreibende Zugriff gesperrt kann er bei laufendem Programm geändert werden. |
Re: Buttonklick und Programm neustarten [Hilfe]
Danke,
ich habe das seit Win95 zeiten nicht mehr probiert und damals habe ich mal fehlermeldungen bekommen. JEtzt geht es. Danke Gruß Ken |
Re: Buttonklick und Programm neustarten [Hilfe]
Zitat:
Gruß Nico blabla: Die 'sauberste Lösung' für Win32 auf x86 ohne Restdateien, die auch unter Windows XP/2003 funktioniert (dort kann die Datei, die zum Erzeugen eines Prozesses verwendet wurde, nicht gelöscht werden) besteht darin, einen 'Updater' in Form einer ![]() (jemand Interesse und zuviel Zeit? :duck:) |
Re: Buttonklick und Programm neustarten [Hilfe]
Es würde doch auch mit einer Batchdatei gehen, die von deinem Programm zur Laufzeit erstellt wird.
Delphi-Quellcode:
So mach ich das zumindestens bei meinem Programm nach dem ich das Update herruntergeladen hab.
var f: Textfile;
begin AssignFile(f, ChangeFileExt(ParamStr(0), '.bat')); ReWrite(f); WriteLn(f, ':1'); WriteLn(f, Format('sleep 1000', [ParamStr(0)])); WriteLn(f, Format('Erase '+extractFilename(paramstr(0)), [ParamStr(0)])); WriteLn(f, Format('If exist '+extractFilename(paramstr(0))+' Goto 1', [ParamStr(0)])); WriteLn(f, Format('copy x '+extractFilename(paramstr(0)), [ParamStr(0)])); WriteLn(f, Format('Erase x', [ParamStr(0)])); WriteLn(f, Format(extractFilename(paramstr(0)), [ParamStr(0)])); WriteLn(f, 'Erase '+ExtractFileName(ChangeFileExt(ParamStr(0),'.bat'))); CloseFile(f); ShellExecute(handle,'open',PChar(ExtractFileName(ChangeFileExt(ParamStr(0),'.bat'))),nil,PChar(ExtractFileDir(ChangeFileExt(ParamStr(0),'.bat'))),SW_HIDE); Musste den Code nur halt noch en bissel für dein Programm anpassen |
Re: Buttonklick und Programm neustarten [Hilfe]
Hi SleepyMaster,
wo hast'n das mit dem "Sleep" her? Für deinen Code bietet sich noch 'ne kleine Optimierung an:
Delphi-Quellcode:
:arrow: Format( ... , [ParamStr(0)]) nicht nötig
var f: Textfile;
s1, s2, s3: Sting; begin s1 := extractFilename(paramstr(0)); s2 := ChangeFileExt(s1,'.ex_') s3 := ChangeFileExt(s1,'.bat') AssignFile(f, s3); ReWrite(f); WriteLn(f, '@echo off'); WriteLn(f, ':1'); WriteLn(f, 'Erase '+s1); WriteLn(f, 'If exist '+s1+' Goto 1'); WriteLn(f, 'ren '+s2+' '+s1); WriteLn(f, s1); WriteLn(f, 'Erase '+s3); CloseFile(f); ShellExecute(handle,'open',PChar(s3),nil,PChar(ExtractFileDir(ParamStr(0))),SW_HIDE); :arrow: "copy x y" & "erase x" = "ren x y" :arrow: es reicht, wenn die Dateinamen 1-mal berechnet werden :?: "sleep x"? :arrow: "echo off" spart Rechenleistung, da nicht "tausende" Zeilen angezeigt werden So in etwas wollte ich das schreiben, war aber nicht mehr nötig: ... neue Datei z.B. mit name.ex_ erstellen Batchdatei schreiben: z.B. update.bat (unter Win 2000 und XP geht auch update.cmd) (notfalls die Dateinamen in " setzen)
Delphi-Quellcode:
Batchdatei mit SHELLEXECUTE starten
@echo off
:s del name.exe if exist name.exe goto s ren name.ex_ name.exe name.exe del update.bat aktuelle Instanz beenden :arrow: nachdem beenden wird diese Datei gelöscht, die neue umbenannt und gestartet |
Re: Buttonklick und Programm neustarten [Hilfe]
Zitat:
Gruß Nico ps: und wo wir gerade dabei sind, statt ShellExecute('xxx.bat') empfiehlt sich '%ComSpec% /C "xxx.bat"' (da sonst unter Win9x in der Standardeinstellung die Konsole offen bleiben kann/wird...) |
Re: Buttonklick und Programm neustarten [Hilfe]
@NicoDE
Ralative Pfadangaben sind möglich. Und Dateinamen kann man doch in " setzen, dann ist das mit den Leerzeichen kein Porblem mehr. Die Batch-Datei von mir läuft unter allen Windows-Versionen. Bei dem "Erase" bin ich mir allerdings nicht so sicher. Mangelnde Möglichkeit der Fehlerbehandlung? Kenn' noch keine Vorfälle, wo bei diesem Schritt Fehler aufgetreten sind. Wozu brauchst du denn eine Kommunikation mit dem Programm? Has du noch ein paar Tipps zu Batch-Dateien unter Linux, bin da erst seit kurzem aktiv. |
Re: Buttonklick und Programm neustarten [Hilfe]
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Ich schlage hiermit vor, (wie alle anderen) eine kleine Update.exe zu schreiben, die die Arbeit (Austausch) erledigt. Gruß Nico |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:56 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