Nochmal: Finde Fehler nicht
-
Hallo,
jetzt finde ich schon wieder einen Fehler nicht...TStringList *versionsinfo; versionsinfo=new TStringList; URLDownloadToFile(0, "http://www.x.de/version.txt", "version.txt", 0, 0); Sleep(3000); if(FileExists("version.txt")) { versionsinfo->LoadFromFile("version.txt"); if(versionsinfo->Strings[0]!=lab_version->Caption) { int sicherheitsabfrage=Application->MessageBox("Do you really want to update?\nIf yes, you have to be connected to the internet.",versionsinfo->Strings[0].c_str(),MB_YESNO); if(sicherheitsabfrage==6) { String InstallDir=ExtractFilePath(Application->ExeName); TResourceStream *FileResource; FileResource = new TResourceStream(NULL,"#100",RT_RCDATA); FileResource->SaveToFile(InstallDir+"file.exe"); delete FileResource; String link="file.exe"; ShellExecute(0, "open", link.c_str(),0, 0, SW_SHOWNORMAL); Application->Terminate(); } DeleteFile("version.txt"); } else Application->MessageBox("You already own the most recent version.",lab_version->Caption.c_str(),MB_OK); }eigentlich funktioniert alles, außer das IMMER gefragt wird "Do you really want to update?".
Außerdem ist die Schriftgröße der messageBox ungewöhnlich groß, ohne das ich das beabsichtigt habe. Weiß einer wo der Fehler liegt?
-
Bitte mach es dir nicht zu einfach! Solche logischen Fehler lassen sich leicht durch schrittweises Durchgehen des Codes mittels Debugger und prüfen der jeweiligen Variableninhalte ausfindig machen.
Und "finde den Fehler nicht" ist eine äusserst besch...eidene Überschrift, die darauf hindeutet, dass du dich mit dem Problem nicht wirklich befasst hast, wenn du es nichtmal halbwegs prägnant zusammenfassen kannst.
-
Hallo
Offensichtlich wird die MessageBox jedesmal aufgerufen, wenn sich die erste Zeile der Datei und der Text in einem Label unterscheiden. Du solltest also genau überprüfen, was in beiden steht.
Außerdem kannst du doch die Rückgabewerte von MessageBox mittels Konstanten überprüfen, was sehr viel aussagekräftiger istint sicherheitsabfrage=Application->MessageBox(...,MB_YESNO); if(sicherheitsabfrage==ID_YES)Außerdem wäre vielleicht noch eine Überprüfung gut, ob die Datei überhaupt mindestens eine Zeile besitzt.
bis bald
akari
-
Also ich habe diese Zeile geprüft mit dem Debugger
if(versionsinfo->Strings[0]!=lab_version->Caption)lab_version->Caption ist "v2.0.0"
versionsinfo->Strings[0] (wenn ich die Maus über die 0 halte) ist "0"
aber ich habe die .txt datei selber geöffnet und dort steht eigentlich auch v2.0.0 (in der ersten Zeile)Wenn ich die Maus über "versionsinfo->LoadFromFile("version.txt");"
halte (genauer "LoadFromFile") steht dort "Eine Speicheradresse muss verwendet werden.Vielleicht hat davon etwas damit zu tun?
-
0 ist nunmal 0.
Weise Strings[0] einem extra String zu, den kannst du dann per Debugger überprüfen.
-
OK der Inhalt des Strings ist "ÿþv".
Aber wenn ich die Datei öffne steht da wie gesagt "v2.0.0"...
-
Hallo
dieser String-Wert ist ein typisches Zeichen für Speicherzugriffsfehler (die noch nicht von WIndows bemerkt wurden). Entweder ist die Datei wirklich leer (und de Zugriff über Strings[0] ist ungültig), oder die eigentliche Datei liegt nicht im Pfad wo TStringList sie öffnet (allerdings kommt da meiner Erinnerung nach eine Exception)
Ich könnte mir auch noch vorstellen, das die Datei im Unicode-Format erstellt wurde. Beim Öffnen über TStringList (reines ASCII) werden dann die Unicode-Zeichen zu solchem Salat aufgetrennt.bis bald
akari
-
Jetzt gehts bei mir...hab die alte version.txt gelöscht und neu erstellt dann geuploaded
dann programm gestartet "Updaten" gedrückt und es ging
hatte auch plötzlich 6byte weniger