![]() |
Buttonklick und Programm neustarten [Hilfe]
Hy @all
Habe ein Problem. Habe meinem Programm eine Update funktion eingebaut und jetzt möchte ich wenn das Programm fertig herunten ist und ich auf den Button klicke das das Programm automatisch geschlossen und dann gleich wieder neu gestartet wird. Beenden und umschreiben das funktioniert alles nur der neustart. Kann man das machen. Mfg StoRmtec |
Re: Buttonklick und Programm neustarten [Hilfe]
|
Re: Buttonklick und Programm neustarten [Hilfe]
Danke für den Tip und wie soll das dann funktionieren.
Mfg StoRmtec |
Re: Buttonklick und Programm neustarten [Hilfe]
Das Frag ich mich auch.
Höhstens eine zweite Instanz dadurch starten die eigentlich schon geupdatet sein müsste und danach das alte Programm beenden. |
Re: Buttonklick und Programm neustarten [Hilfe]
- Download der Datei unter anderen Namen
- Original-EXE umbenennen - Downloadfile passend umbenennen - Programm verstecken (Form1.Hide) - Programm starten (2. Instanz) - 1. Instanz beenden - umbenannte Original-EXE löschen |
Re: Buttonklick und Programm neustarten [Hilfe]
Hy
Aber bevor das Programm nicht beendet ist kann er mir das nicht updateen oder? mfg StoRmtec |
Re: Buttonklick und Programm neustarten [Hilfe]
Gut erkannt. Die von mir angeführte Reihenfolge dürfte das Problem allerdings umgehen.
|
Re: Buttonklick und Programm neustarten [Hilfe]
Hallo,
du wirst die original exe aber nicht umbenennen können wenn das original programm noch läuft. Gruß Ken |
Re: Buttonklick und Programm neustarten [Hilfe]
Und warum nicht? Ich zumindest mache es immer so, wenn ich beruflich Updates einspiele. Kann ja nicht zig-Menschen bei der Arbeit stören ...
|
Re: Buttonklick und Programm neustarten [Hilfe]
hallo,
ich habe den Thread entweder nicht richtig gelesen oder nicht richtig verstanden. Er will doch das update runterladen, die exe des laufenden programms umbenennen, das laufende programm beenden und nach dem umbenennen der runtergeladenen exe diese dann starten, oder? :gruebel: Also, wenn ich im explorer eine laufende exe umbenenne, bekomme ich immer fehlermeldungen, weil diese von einem anderen prozess verwendet wird. Ich lasse mich da aber echt gerne eines funktionierenden weges belehren, da ich daß auch schon seit einiger zeit versuche. :-D Gruß KEn |
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 12:33 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