Entwickler-Ecke
Sonstiges (Delphi) - Delphi Löscht einfach Dateien
Xearox - Mi 17.03.10 16:00
Titel: Delphi Löscht einfach Dateien
Also, folgendes Problem:
Ich habe einem Freund, für sein Programm, einen Updater via FTP geschrieben.
Er hat dies in sein Programm integriert, nun war das Problem, das beim Start des Programms, Delphi hängen geblieben ist,
wieso auch immer, bei mir lief der Updater einwandfrei.
So, nun ist das so, das nachdem er Delphi geschlossen hatte(Delphi ist komplett abgeschissen), das all seine Sourcen, die er verwendet hat, gelöscht wurden.
Es handelt sich um Delphi 7 PE
Ich habe den Updater in D2010 geschrieben.
Kann hier wer helfen?
jaenicke - Mi 17.03.10 16:58
Delphi selbst löscht da sicher nichts das hat er dann schon selbst gemacht. Entweder durch ein Programm von ihm ganz manuell oder er hat einen Virus (bei D7 gibts mittlerweile einige die aber auf gut eingerichteten PCs kaum etwas machen konnten).
Jakob_Ullmann - Mi 17.03.10 19:24
Vielleicht waren die Dateien einfach nicht geschlossen und Windows hat sie beim Festplattencheck gelöscht?
Xearox - Mi 17.03.10 20:58
nichts der gleichen
er hat das Programm gestartet, programm ist hängen gebliebn, also D7 komplett.
Er hat es per TaskManager geschlossen
Alle Sorcen waren daraufhin weg
Jakob_Ullmann - Mi 17.03.10 21:01
Dann würde ich auch eher
jaenickes These unterstützen. Oder aber die Dateien sind "noch da" und existieren nur nicht mehr in der Tabelle.
Delete - Mi 17.03.10 22:33
Wie soll ein abgestürztes Programm Dateien löschen können?
Xearox - Mi 17.03.10 22:34
weiß ich nicht, er sagte mir, nach dem er mein code implementiert hat, ist delphi hängen geblieben, und danach wären die sourcen weg gewesen
Xentar - Mi 17.03.10 23:22
Ist jetzt ein wenig die Frage, wie der Updater arbeitet..
Werden hier irdenwelche Dateien gelöscht, oder "nur" überschrieben? Kann man die Dateien auswählen, oder wie läuft das? Solche Sachen..
Ansonsten kann ich das auch nicht ganz glauben, dass durch ein abgestürztes Delphi alle Dateien weg sein sollen.
Vielleicht mal chkdsk drüber laufen lassen?
Xearox - Do 18.03.10 01:04
also, sagen wir mal so, der updater ist nicht gerade, was man nem Profi, der richtig Programmieren kann, erwarten kann...
Ich lediglich jemand, der Delphi gerade erst lernt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| unit update;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdFTP, StdCtrls;
type TMainForm = class(TForm) IdFTP1: TIdFTP; procedure Updater; private public end;
var MainForm: TMainForm;
implementation
{$R *.dfm}
procedure TForm2.Updater; begin showMessage('Bitte Einen Moment, Update wird jeden moment gestartet, bitte OK drücken, Programm wird automatisch geschlossen'); IdFTP1.Username := ('') ; IdFTP1.Password := (''); IdFTP1.Host := ('') ; IdFTP1.Connect; IdFTP1.ChangeDir(''); try IdFTP1.Get(' ', (ExtractFilePath(ParamStr(0)) + ' '), true); except showMessage('Update Fehlgeschlagen'); end; showMessage('Update Erfolgreich'); IdFTP1.Quit; close; winexec(ExtractFilePath(ParamStr(0)) +'.\Project1.exe', SW_SHOWNORMAL); end;
end. |
Das war der Grund code.
Er hat beim Update Button nun eingefügt:
Delphi-Quelltext
1: 2: 3:
| begin form1.close; Updater; |
bedeutet, damit die Project1.exe überschrieben werden kann, muss diese exe erstmal geschlossen werden, also Form1.close
und dann wird die Projekt1.exe überschrieben, und dann neu geöffnet.
so und nun beim starten ist Delphi komplett abgeschissen
platzwart - Do 18.03.10 01:52
Mal ganz doof gefragt: Das Programm beendet sich selbst. Das beendete Programm, das nun nicht mehr läuft, ruft den Updater auf, der die nicht mehr laufende Exe ersetzt. Anschließend wird das Programm wieder gestartet. Kommt das nur mir komisch vor oder ist das wirklich unlogisch (falsch^^)?!?
chickenfigt1989 - Do 18.03.10 04:56
Es müsste doch erst den Update aufrufen und dann die Exe schließen oder?
Das ist so, wie mit dem Beispiel das hier mal gebracht wurde mit dem Motor.
Man schaltet auch nicht dem Motor aus und gibt dann Gas.
Gruß
jaenicke - Do 18.03.10 07:07
platzwart hat folgendes geschrieben : |
Das Programm beendet sich selbst. Das beendete Programm, das nun nicht mehr läuft, ruft den Updater auf, der die nicht mehr laufende Exe ersetzt. Anschließend wird das Programm wieder gestartet. Kommt das nur mir komisch vor oder ist das wirklich unlogisch (falsch^^)?!? |
Es funktioniert auch schlicht nicht. Ich habe das zwar nicht noch extra ausprobiert, aber was passieren sollte ist, dass Indy einfach gar nix macht.
Denn durch das Close wird das Programm ja nicht direkt geschlossen, sondern erst sobald der aktuelle Code abgearbeitet ist. In diesem Fall der des "Updaters". Das heißt der "Updater" startet im Grunde nur die eigene Exe neu, mehr nicht. ;-)
Machen kann man das aber grundsätzlich schon so, wenn man die Exe vorher umbenennt und nach dem Neustart löscht. :idea:
So arbeitet auch
mein Updater [
http://www.delphi-forum.de/viewtopic.php?t=94339].
WinExec ist allerdings so ziemlich die schlechteste Idee, die man dafür haben kann... Der Befehl ist 20 Jahre alt und nur noch für Windows 3.1 Abwärtskompatibilität vorhanden. Dafür gibt es ShellExecute.
Xearox - So 21.03.10 06:23
Ich weiß ja nicht wie das bei euch ist, aber wenn ich close; mache und Winexec oder ShellExecute, wie auch immer, aufrufe, wird das programm dennoch gestartet.
Als ich mir Platzwart antwort hab ich auch gedacht, hmm, irgendwas stimmt ja da nicht, aber dennoch macht ers bei mir.
Obwohl dies auch für mich eher Unlogisch erscheint, das ein geschlossenes Programm ein anderes aufrufen kann.
Aber es ist so.
darauf hin wird die Datei per FTP vom server Downgeloadet, und die exe automatisch überschrieben, danach wird die exe erneut aufgerufen.
Aber was ich glaube ist, dass das Problem wohl eher daran liegt, das man aus Delphi heraus auf Projekt Starten geklickt hat, und darauf hin die eigenliche exe, also was man in Delphi Compiliert und gestartet hat, beendet wird, und eine andere exe aufgerufen wird.
Vermutlich hat sich deswegen Delphi aufgehangen, das er das nicht so gemocht hat.
jaenicke - So 21.03.10 10:39
Xearox hat folgendes geschrieben : |
Ich weiß ja nicht wie das bei euch ist, aber wenn ich close; mache und Winexec oder ShellExecute, wie auch immer, aufrufe, wird das programm dennoch gestartet.
Als ich mir Platzwart antwort hab ich auch gedacht, hmm, irgendwas stimmt ja da nicht, aber dennoch macht ers bei mir. |
Ich habe es doch schon erklärt:
Close schließt
nicht sofort, sondern erst, wenn dein Quelltext abgearbeitet ist, in dem dieser Befehl steht. Und wenn danach dein Updatercode kommt, dann wird auch dieser inkl. Start des Programms ausgeführt
bevor das Programm geschlossen wird.
Xearox - So 21.03.10 13:02
naja, ist jetzt eh geklärt...ihm werd ich ganz sicher nicht mehr helfen.
Im Anhang befindet sich ein ganz toller Text, von maier1990 bzw. chickenfighter1989 usw.
Moderiert von
Christian S.: Screenshot von privatem Chat entfernt
chickenfigt1989 - So 21.03.10 13:26
Dan is es ja gut du kleena Freak :)
Von früh Morgens bis Spät Abends online :)
Wie wärs mal mit nen Reallife?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!