1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

C++ Updater programmieren

Dieses Thema im Forum "C/C++" wurde erstellt von Prestige__, 1. Januar 2018.

  1. Prestige__

    Prestige__ Grünschnabel

    Hallo. Ich möchte in C++ und oder in Batch einen Updater für mein Programm schreiben. Ich hab den Updater erstmals Versucht in Batch zu schreiben, und so hab ich mir das vorgestellt:

    Code ((Unknown Language)):
    1. if exist [URL]http://adsoleware.com/project/update/1.txt[/URL] goto update1
    2. if not exist [URL]http://adsoleware.com/project/update/1.txt[/URL] goto urlfail-1
    3.  
    4. :update1
    5. if exist [URL]http://adsoleware.com/project/update/2.txt[/URL] goto update2
    6. if not exist [URL]http://adsoleware.com/project/update/2.txt[/URL] goto urlfail-2
    7.  
    8. :update2
    9. if exist [URL]http://adsoleware.com/project/update/3.txt[/URL] goto update3
    10. if not exist [URL]http://adsoleware.com/project/update/3.txt[/URL] goto urlfail-3
    11.  
    12. :update3
    13. if exist [URL]http://adsoleware.com/project/update/4.txt[/URL] goto update4
    14. if not exist [URL]http://adsoleware.com/project/update/4.txt[/URL] goto urlfail-4
    15.  
    16. :update4
    17. if exist [URL]http://adsoleware.com/project/update/5.txt[/URL] goto update5
    18. if not exist [URL]http://adsoleware.com/project/update/5.txt[/URL] goto urlfail-5
    19.  
    20. :update5
    21. if exist [URL]http://adsoleware.com/project/update/6.txt[/URL] goto update
    22. if not exist [URL]http://adsoleware.com/project/update/6.txt[/URL] goto urlfail-6
    23.  
    24.  
    25.  
    26. :urlfail-1
    27. start urlfail-1.vbs
    28. exit
    29.  
    30. :urlfail-2
    31. start urlfail-2.vbs
    32. exit
    33.  
    34. :urlfail-3
    35. start urlfail-3.vbs
    36. exit
    37.  
    38. :urlfail-4
    39. start urlfail-4.vbs
    40. exit
    41.  
    42. :urlfail-5
    43. start urlfail-5.vbs
    44. exit
    45.  
    46. :urlfail-6
    47. start urlfail-6.vbs
    48. exit
    49.  
    50.  
    51.  
    52. :update
    53. wget.exe --no-check-certificate [URL]http://adsoleware.com/project/update/6.txt[/URL]
    54. start 6.txt
    55. start urlok.vbs
    56. exit
    So hätte ich mir das eben vorgestellt, klappt aber nicht, da es bei dem ersten Update-check nicht funktioniert. Ich vermute, dass man keine Weblinks mit 'if exist' und 'if not exist' abfragen kann, oder zumindest anders als hier bei meinem Code. Jetzt bin ich am überlegen ob ich den Updater in Batch weiter mache, oder in C++ schreibe. Ich bin momentan für C++ da ich mich damit mehr beschäftige, und deshalb poste ich das hier im C/C++ Abschnitt.

    Jetzt wäre meine Frage, wie ich das in C++ umsetzen könnte mit dem 'if exist' und dem 'if not exist'?
    Ich denke mit 'if( link ==ok ) { ....' und das if not mit '}else { ....'

    Meine Idee wäre es falls ich mich doch wieder für Batch entscheide, es vielleicht so zu regeln falls es klapp:

    Code ((Unknown Language)):
    1. @echo off
    2. title AdSoleWare Task Executer (ASW-TE)
    3.  
    4. :main
    5.  
    6. if exist "C:\Users\Marcel\Desktop\AdSoleWare_Setup\update\1.txt" goto check1
    7. if not exist "C:\Users\Marcel\Desktop\AdSoleWare_Setup\updater\1.txt" goto download
    8.  
    9. :check1
    10. if exist "C:\Users\Marcel\Desktop\AdSoleWare_Setup\updater\2.tx"t goto check2
    11. if not exist "C:\Users\Marcel\Desktop\AdSoleWare_Setup\updater\2.txt" goto download
    12.  
    13. :check2
    14. if exist "C:\Users\Marcel\Desktop\AdSoleWare_Setup\updater\3.txt" goto check3
    15. if not exist "C:\Users\Marcel\Desktop\AdSoleWare_Setup\updater\3.txt" goto download
    16.  
    17. :check3
    18. if exist "C:\Users\Marcel\Desktop\AdSoleWare_Setup\updater\4.tx"t goto check4
    19. if not exist "C:\Users\Marcel\Desktop\AdSoleWare_Setup\updater\4.txt" goto download
    20.  
    21. :check4
    22. if exist "C:\Users\Marcel\Desktop\AdSoleWare_Setup\updater\5.txt" goto check5
    23. if not exist "C:\Users\Marcel\Desktop\AdSoleWare_Setup\updater\5.txt" goto download
    24.  
    25. :check5
    26. if exist "C:\Users\Marcel\Desktop\AdSoleWare_Setup\updater\6.txt" goto close
    27. if not exist "C:\Users\Marcel\Desktop\AdSoleWare_Setup\updater\6.txt" goto download
    28.  
    29.  
    30. :download
    31. wget.exe --no-check-certificate http://adsoleware.com/project/update/6.txt
    32. start urlok.vbs
    33. exit
    34.  
    35. :close
    36. exit
    P.S.:
    Es kann ruhig passieren das ich viele Fragen stellen werde :D... Es tut mir leid falls es stört. und wegen dem Thema, ich weiß nicht ganz wo ich das dazu zählen sollte, da es um C++ und Batch geht.
     
  2. sheel

    sheel I love Asm Administrator

    Hi

    es ist kein Problem viele Fragen zu stellen :)
    ...aber eine hab ich auch: das Thema ist schon als erledigt markiert - ist das Absicht?

    Sonst, ich würde sowas auch nicht in Batch machen - das Nicht-Url-verstehen wird nicht das einzige Problem bleiben (nächstes Problem zB., wget ist normalerweise nicht bei Windows dabei), und es ist für größere Programme keine wirklich brauchbare Sprache.

    Aber auch in C++ kanns recht komplex werden - Gründe zB.
    • So fix hingeschriebene Dateilisten sind langfristig nicht wirklich brauchbar - wär nicht ein allgemeiner(er) Mechanismus nett, mit dem man beliebig viele neue Versionen mit beliebigen Dateien haben kann? Prinzipiell kennt das Programm seine eigene Version, kann die aktuellste Version vom Server abfragen, und bekommt von einem fixen Dateinamen ein Zip mit allen nötigen Dateien des Programmordners, und bei Bedarf Dateien für andere Plätze und/oder Installationsanweisungen auch.
    • Https ... aus ziemlich vielen Gründen.
    • Hashes der übertragenen Dateien gegen Übertragungsfehler (die Checksummen in TCP usw. reichen nicht immer)
    • Wenn man Leuten mit mehr Computern, und dem eigenen Server, was gutes tun will, ermöglichen dass man eine lokale Datei als Datenquelle für den Updater angibt (die der Benutzer zuerst selbst heruntergeladen hat). Inklusive einer krypt. Signatur für die Echtheitsprüfung (sonst Warnung).
    • Je nach Programm, und Installationsort usw., sind evt. Adminrechte für den Updater nötig. Auf Windows etwas umständlich, die Abfrage ins Programm einzubauen.
    • Man kann auf Windows die Dateien laufender Programme nicht ersetzen. Macht einen Updater noch umständlicher, da er (je nach Fall) irgendwo außerhalb vom Programmordner laufen muss (und später vom Hauptprogramm wieder entfernt werden muss)
    • Vielleicht soll der selbe Code ja für mehrere Betriebssysteme verwendbar sein (auch wenn du dann vermutlich nicht Batch genommen hättest)
    • ...
    hash https signatur admin laufend

    Zu wget noch, --no-check-certificate ist ein Sicherheitsrisiko. Wenn es ohne nicht funktioniert, besser den Server richten.
     
  3. Prestige__

    Prestige__ Grünschnabel

    Ja ich hab das jetzt vorerst mal mit Batch gelößt. Das ganze Programm ist erst im 'Alpha Mode', also ganz am Anfang.

    +)
    Für das "Problem" mit den Admin-Rechte gibt es eine recht simple Lösung. Wenn man in den Dateinamen einer .exe Datei 'setup', 'install, .... dazu schreibt, verseht TrustedInstaller diese Datei mit dem Admin manifest (hoffentlich so richtig :D).

    +)
    Wie meinst du das genau bei Punkt 4?

    +)
    Wegen Punkt 6.... Ich hab vor es so zu machen das wenn der Updater sich startet die jeweiligen Prozesse zu schließen (zB: taskkill /f /im AdSoleWare.exe /T).
    Mit den Updates die ich plane wird sich sehr viel ändern. Ich habe auch richtig viele Ideen für Features, abe die kommen eben im Laufe der Zeit mit Updates ins Programm mit dazu.

    Und eine Frage hab ich noch... Wie kann man Programme verschlüsseln? Also den Quellcode schützen. Man kann ja Programme decompilen, ich möchte später einmal nicht das mein Code geklaut werden kann :/

    Und ja das Thema wäre abgeschlossen, teilweiße jetzt aber wieder.
     
  4. sheel

    sheel I love Asm Administrator

    Dass Windows das Manifest selber ändert ist mir allerdings neu...

    Mit dem Punkt 4 (Offlinedateien) meine ich, dass man den Benutzer vom Updater nicht zwingt, den Download von deinem Server zu machen, sondern dass man den Downloadschritt eben auslassen kann und dem Updater selber irgendeinen Ordner gibt, wo die Dateien lokal schon sind. Der Updater macht dann alles nach dem Download mit diesen Dateien.
    Falls außer dem Download und dem richtigen Platzieren der Dateien generell nichts zu tun ist ist der Punkt egal, aber das dann bitte irgendwo dem Benutzer auch klarmachen

    Der Teil mit der Signatur: Eine krytographische Signatur ist etwas, mit dem man (wenn richtig eingesetzt) prüfen kann, ob Daten (zB. die Updatedatei) wirklich von dir sind (du = Besitzer eines geheimen "Schlüssels", eine kleine Datei).. Je nach Sinn und Art vom Programm wäre es evt. angebracht, sowas zu machen, und das im Updater lokal auch prüfen zu lassen.

    Zu taskill, bitte nicht. Rechteprobleme, möglicher Datenverlust, usw. - besser das Hauptprogramm sich selbst beenden lassen.

    Wenn das Programm auf den Computern der Benutzer läuft, über die du keine Kontrolle hast: direkt gesagt, gar nicht.

    Alles was man machen kann ist, dass ein Leser vom Code länger braucht, um ihn zu verstehen (aber das bei dekompiliertem C++ aus technischen Gründen sowieso schon ziemlich gut, ohne zustätzliche Maßnahmen).

    Was ich mich eher fragen würde, was willst du verhindern? Wirklich, dass jemand versteht, wie dein Programm funktioniert? Oder evt. entgangenes Geld weil jemand die Lizenzprüfung entfernt hat? Oder...?
     
  5. ComFreek

    ComFreek Mod | @comfreek Moderator

    Es gibt übrigens solche Updater auch als 3rd-Party-Komponenten. Du kannst z. B. nach "c++ updater github" oder "c++ updater opensource" mal googlen ;)
     
  6. Prestige__

    Prestige__ Grünschnabel


    Ich möchte nur nicht das jemand mal meinen Code stehlen kann oder selbst verwenden kann. Ich hatte auch mal die Idee das Programm später irgendwann mal zu verkaufen, ja, aber das wird noch dauern da ich dafür ein Gewerbe brauche und ich noch keine 18 Jahre bin. Nochdazu ist das Projekt noch frisch geschlüpft, also es gibt es schon seit 2 - 3 Monaten, was aber meiner Meinung dennoch noch nicht lange ist, und da das Programm aufgrund dessen noch nicht alle Funktionen besitzt die im Laufe der Zeit hinzugefügt oder fertiggestellt werden müssen, finde ich es angemessen das Programm deshalb vorerst kostenlos zur Verfügung zu stellen. Ein anderer Grund ist das es eben wie gesagt das Projekt noch nicht lange gibt und deshalb auch noch nicht bekannt ist, und unbekannten Websites oder generel unbekannten Dingen traut man anfangs ja noch nicht, und das ist auch ein Grund weshalb wir es fürs erste kostenlos anbieten möchten, damit, falls mal Leute unsere Seite finden, einen Einblick in alles bekommen und das Programm sodurch mal 'testen' können.

    Punkto Updater:


    Also damit ich das richtig verstehe:
    Der Nutzer soll selber das Update starten können, und nicht automatisch und man sollte auch einen eigenen Pfad für den Updater angeben können, falls das so richtig ist. Ich finde die Idee nicht so schlecht und wüstste schon wie ich sie umsetzten könnte. Das mit dem Updater, das man die Updates selber machen sollte oder kann, find ich auch nicht schlecht. Meiner Meinung ist die Idee für den Updater echt sehr gut, denn: Ich habe jetzt drüber nachgedacht und es wäre ja der Computer des Nutzers, und dieser entscheided ja immerhin was auf dem Computer passieren soll und was nicht, weshalb ich mich umentschieden hab es so zu machen. Ich hatte auch die Idee, es vielleicht so zu machen das standartmäßig der manuelle Updater an ist, und der Benutzer, bei belieben, den Updater automatisieren kann.

    Wegen der Singatur:
    Da bräuchte ich noch ein etwas mehr wissen und aufklärung darüber.

    PS:
    Das mit dem taskkill war nur ein schnelles Beispiel. Für die Konsolenanwendung würde ich es zB so machen, das nachdem alles abgeschlossen wäre, das sich das Programm zB mit 'return 0;' schließt oder auf andere Weise, je nach dem was es alles so noch zur Verfügung gebe.

    Und tut mir leid wegen der späten Antwort. Hatte etwas stress
     
  7. Prestige__

    Prestige__ Grünschnabel

    Ja es wäre vielleicht eine möglichkeit, aber ich finde es besser wenn man Dinge oder Funktionen wie diese selber macht, da man dann volle Rechte daran besitzt. Angenommen ich verwende InstallForge. Da wäre was ich gesehen habe ein Lizenzsystem mit im Setup und eine VS-Updater was ich gesehen habe, aber man darf die zB ohne Erlaubnis nicht verkaufen also kommerziell nutzen. Dafür bräuchte man wahrscheinlich eine Lizenz und diese kostet dann möglicherweise Geld.
     
  8. ComFreek

    ComFreek Mod | @comfreek Moderator

    Unter den 3rd-Party AutoUpdater-Komponenten waren einige OpenSource-Projekte dabei. Bestimmt findest du unter denen ein Projekt mit einer passenden Lizenz.

    Vereinfacht gilt in meinen Augen "Selbst entwickeln = volle Rechte + mehr Arbeit + viel mehr Bugs und Sicherheitslücken als existierende Systeme", siehe auch https://de.wikipedia.org/wiki/Not-invented-here-Syndrom

    Gerade bei einem Autoupdater hast du ein riesen Problem, wenn der Updater irgendwann einmal kaputt wegen einem x-beliebigen Bug ist. Stell dir vor, das passiere mit dem Autoupdater deines Betriebssystems.

    Ich würde es genau andersrum empfehlen. Welcher Nutzer startet Updates manuell heutzutage? Gerade bei Sicherheitslücken ist das sehr kritisch. Eigentlich möchte man Updates einer Applikation auch dann, wenn sie in letzter Zeit nicht benutzt wurde. Dafür und zur Installation der jeweiligen Software gibt es Paket Manager. (Wie man Pakete mit kostenpflichtiger Software erstellt, ist wieder eine individuelle Frage - etwa vertreibst du deine Software frei zugänglich, jedoch nicht die Lizenz Codes.)
     
  9. Prestige__

    Prestige__ Grünschnabel


    Ich weiß das es einige Bugs (etwas viele eher) geben wird, aber mich stört das nicht wirklich. Ich programmiere weil es eines meiner Hobbys ist und da es eben meine Software wäre, könnt ich eben alles darüber entscheiden ohne wirklich fragen zu müssen. Außerdem programmiere ich eben gerne und somit würde ich auch mehr dazu lernen punkto Bugs, also wie man diese am besten beseitigt und wie man damit umgeht und so. Und wenn das ganze dann wirklich fertig wäre könnt ich auch total stolz sein so etwas selbst entwickelt zu haben :D.

    Wegen dem Updater Bug:
    Ich hab im Programm selber nochmal ein kleines Info-Center gemacht wo so ziemlich alles über das Programm drinnen stehen wird. Dort steht auch die 'Offizielle Download Seite'. Also falls mal etwas kaputt werden würde, könnte man dort dann auf die website gehen und sich das evt nochmal neu herunterladen oder von dort die aktuellste Version herunterladen. Ich hab das alles mit dem 'Lizenz-System' so vorgestellt, das auf einem Server sich Verzeichnisse erstellen die zB den Nickname oder den vollen Namen wie zB 'Marcel-Schalk'. Und da ich eher vor hätte das Programm also die Anfrage dafür und später mal die Bestellung per Hand zu bearbeiten und selber auf Gültigkeit prüfen. Es wäre mir so eben erstmals lieber und jeder würde zwar das gleiche Programm bekommen, aber immer mit einem anderen Passwort geschützt, dem Lizenzsschlüssel eben, und beim Installieren und beim Updaten werden diese Schlüssel immer aus einer Datei gelesen. Falls diese richtig sind und vorhanden, Installiert sich das Programm oder Updatet sich.

    Wegen dem Paket Manager hab ich das schon erstmals geregelt

    Das heißt wenn man die Bestellung macht und die richtig is würden wir oder ich eben demjenigen eine Email schreiben in dem der Lizenzschlüssel und Update Schlüssel steht. Der Lizenzschlüssel ist dafür, damit man nicht einfach so das Programm herunterladen und verwenden kann, und der Updatekey damit man, falls man es geschaft hat das Hauptprogramm zu verwenden, damit dieser nicht gratis die Updates bekommt. Deshalb gibt es diese zwei Schlüssel. Und wenn ein Programm gesperrt wird weil diejenige Person zB gegen die Nutzungsbedingungen verstoßen hat, kann dieses Verzeichniss am Server gelöscht werden und somit bekommt dieser keine neuen Updates mehr und vielleicht füge ich auch noch eine Funktion hinzu dass wenn eine bestimmte url oder datei nicht mehr exestiert, das sich das programm selber löscht.
     
  10. ComFreek

    ComFreek Mod | @comfreek Moderator

    Da hast du absolut recht! Wenn es um den Lernfaktor geht oder nur als Hobby, zieh ich meine Aussage komplett zurück :rolleyes:

    Das ist doch schon mal ein guter Anfang!


    Das ist aber dreist :eek: :D
     
  11. Prestige__

    Prestige__ Grünschnabel

    :D

    Es hat ca 1 - 2 Wochen gedauert bis ich dafür eine Lösung gefunden hatte die erstmals sicher scheint :D.

    Aber wirksam. Ich hab gestern noch ne ganze weile drüber nachgedacht, und auf die Entscheidung gekommen, ein kleines System zu machen was das alles kontrolliert also alles notwendige sucht und abscant. zB Lokale Datei und Webadresse wie zb adsoleware.com/marcel-schalk/scanner/available.dat, weil falls mal die Webadresse wegen fehlender Internetverbindung nicht erreichbar ist, aber die Datei schon, würde es sich komplett löschen nur weil kein Internet an is, drum hab ich vor diese 2 Funktionen gemeinsam zu verwenden, wenn nich sogar mehr falls mir noch etwas einfällt.
     
Die Seite wird geladen...