AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Buttonklick und Programm neustarten [Hilfe]
Thema durchsuchen
Ansicht
Themen-Optionen

Buttonklick und Programm neustarten [Hilfe]

Ein Thema von StoRmtec · begonnen am 14. Okt 2003 · letzter Beitrag vom 17. Okt 2003
Antwort Antwort
Seite 2 von 2     12   
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Buttonklick und Programm neustarten [Hilfe]

  Alt 15. Okt 2003, 17:35
Moin Ken,

Zitat von CenBells:
Also, wenn ich im explorer eine laufende exe umbenenne, bekomme ich immer fehlermeldungen,
Ich nicht.
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von CenBells
CenBells

Registriert seit: 30. Mär 2003
Ort: Kiel urspr. Lübeck
176 Beiträge
 
Delphi 7 Professional
 
#12

Re: Buttonklick und Programm neustarten [Hilfe]

  Alt 15. Okt 2003, 17:51
Danke,

ich habe das seit Win95 zeiten nicht mehr probiert und damals habe ich mal fehlermeldungen bekommen. JEtzt geht es.
Danke

Gruß
Ken
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#13

Re: Buttonklick und Programm neustarten [Hilfe]

  Alt 15. Okt 2003, 18:57
Zitat von CenBells:
ich habe das seit Win95 zeiten nicht mehr probiert und damals habe ich mal fehlermeldungen bekommen. JEtzt geht es.
So ist es, das Umbenennen ist unter Win9x nicht möglich.


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 RunDll32-kompatiblen DLL zu erstellen (diese kann sich selbst löschen, da der Prozeß ja mit der, von Windows gelieferten, RunDll32-Tool erzeugt wurde). Diese Lösung erfordert aber einen nicht zu unterschätzenden Aufwand (Interface, Parser, Fehlerbehandlung, TS-aware, ...) - allerdings kenne ich keine allgemeine Beispiel-Implementation, sodaß bisher jeder bei nil anfangen darf...
(jemand Interesse und zuviel Zeit? )
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#14

Re: Buttonklick und Programm neustarten [Hilfe]

  Alt 16. Okt 2003, 06:27
Es würde doch auch mit einer Batchdatei gehen, die von deinem Programm zur Laufzeit erstellt wird.

Delphi-Quellcode:
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);
So mach ich das zumindestens bei meinem Programm nach dem ich das Update herruntergeladen hab.
Musste den Code nur halt noch en bissel für dein Programm anpassen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Buttonklick und Programm neustarten [Hilfe]

  Alt 17. Okt 2003, 02:12
Hi SleepyMaster,
wo hast'n das mit dem "Sleep" her?

Für deinen Code bietet sich noch 'ne kleine Optimierung an:
Delphi-Quellcode:
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);
Format( ... , [ParamStr(0)]) nicht nötig
"copy x y" & "erase x" = "ren x y"
es reicht, wenn die Dateinamen 1-mal berechnet werden
"sleep x"?
"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:
@echo off
:s
del name.exe
if exist name.exe goto s
ren name.ex_ name.exe
name.exe
del update.bat
Batchdatei mit SHELLEXECUTE starten

aktuelle Instanz beenden

nachdem beenden wird diese Datei gelöscht, die neue umbenannt und gestartet
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#16

Re: Buttonklick und Programm neustarten [Hilfe]

  Alt 17. Okt 2003, 02:25
Zitat von SleepyMaster:
Es würde doch auch mit einer Batchdatei gehen, die von deinem Programm zur Laufzeit erstellt wird.
Grundsätzlich ja. An der Sache stört mich nur die mangelnde Möglichkeit der Fehlerbehandlung und Kommunikation mit dem Programm. Und es ist gar nicht so einfach eine Batch für alle Win32-Systeme zu schreiben (Tip: nimm absolute Pfade und vergiß nicht, daß es Dateinamen mit Leerzeichen gibt).


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...)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Buttonklick und Programm neustarten [Hilfe]

  Alt 17. Okt 2003, 03:07
@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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#18

Re: Buttonklick und Programm neustarten [Hilfe]

  Alt 17. Okt 2003, 03:31
Zitat von himitsu:
Ralative Pfadangaben sind möglich.
Aber meiner Meinung nach nicht sicher, muß jeder selbst entscheiden.
Zitat von himitsu:
Und Dateinamen kann man doch in " setzen, dann ist das mit den Leerzeichen kein Porblem mehr.
Eben das habe ich in dem Beispiel vermißt, deswegen mein Hinweis (Ich habe anno dazumal ca. zwei Tage nur mit dem Testen meiner Batch auf verschiedensten Systemen zugebracht - und Windows und ich sind auf die merkwürdigstens Ideen und Zeichen in Dateinamen gekommen )
Zitat von himitsu:
Bei dem "Erase" bin ich mir allerdings nicht so sicher.
Dann teste es (erase wird immernoch unterstützt, sag ich jetzt einfach mal so)
Zitat von himitsu:
Mangelnde Möglichkeit der Fehlerbehandlung? Kenn' noch keine Vorfälle, wo bei diesem Schritt Fehler aufgetreten sind.
Zum Beispiel Warteschleife, weil das Beenden der einen Instanz des Programms auf einem Terminal Server nicht ausreichte, da ein anderer Benutzer auch beschlossen hatte, eben dieses Programm starten zu müssen... (und der Admin gerade den Shutduwn einleitet u.s.w. - es passieren komische Dinge auf Kundensystemen, glaub mir )
Zitat von himitsu:
Wozu brauchst du denn eine Kommunikation mit dem Programm?
Und wenn es nur dazu da ist, dem Benutzer mitzuteilen, daß es eben nicht geklappt hat (warum ist völlig nebensächlich).
Zitat von himitsu:
Has du noch ein paar Tipps zu Batch-Dateien unter Linux, bin da erst seit kurzem aktiv.
Leider nicht.

Ich schlage hiermit vor, (wie alle anderen) eine kleine Update.exe zu schreiben, die die Arbeit (Austausch) erledigt.


Gruß Nico
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 00:14 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