Autor |
Beitrag |
Xearox
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: Mi 17.03.10 16:00
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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Mi 17.03.10 19:24
Vielleicht waren die Dateien einfach nicht geschlossen und Windows hat sie beim Festplattencheck gelöscht?
|
|
Xearox 
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: 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
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: 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.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 17.03.10 22:33
Wie soll ein abgestürztes Programm Dateien löschen können?
|
|
Xearox 
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: 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
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: 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?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Xearox 
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: 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.
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
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: 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^^)?!?
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
chickenfigt1989
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
So arbeitet auch mein Updater.
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 
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: 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
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: 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?
|
|
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.
Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.
|
|