Update Funktion

  • Hallo in die Runde,

    da dies mein erster Beitrag hier im Forum ist, möchte ich mich ganz kurz vorstellen.

    Ich habe AutoIt erst vor ein paar Monaten entdeckt und befasse mich nun täglich damit und baue es auch in meinen Arbeitsalltag ein. Ob einfache Loginroutinen oder Abfragen, ich bin sehr fleißig mir alles anzueignen was diese wundervolle Sprache hergibt.

    Auch frage ich mich fast täglich, wie umfangreich die Welt von AutoIt noch wird - denn ich entdecke wirklich jeden Tag neue Funktionen und damit kommen weitere Ideen auf.
    Kurzum: Ich bin begeistert und absoluter Fan.

    Zu meinem Anliegen:

    Ich arbeite in einem Unternehmen mit sehr vielen Rechnern und Arbeitsplätzen.

    Weiterhin habe ich ein Tool gebaut mit dem man verschiedene Rechner schnell und einfach abfragen kann. (Status, Version, Ip, usw.)

    Dieses Tool wird von ausgewählten Mitarbeitern genutzt.

    Sobald ich eine neue Version erstelle, soll der Mitarbeiter auch automatisch die aktuellste Version erhalten bzw. über ein Update informiert werden.

    Folgendes habe ich bereits im Netz gefunden:

    der Punkt FileDelete, sollte an der Stelle wahrscheinlich ausgelassen werden.

    Mir erschließt sich allerdings noch nicht so ganz, wie das ganze funktionieren soll.

    Die Macros habe ich alle soweit verstanden.

    Was ich nicht verstehe, warum $UpdateVersionPath nicht deklariert wurde.

    Denn so, kann die Funktion doch gar nicht laufen?

    Für meine Zwecke, hätte ich das gern so, dass ich einen Pfad im Netzwerk angebe auf den alle ausgewählten Nutzer Zugriffsrechte haben und automatisch die neuste Version erhalten.

    Könnt ihr mir dabei bitte helfen?

  • Hi!

    Die Funktion funktioniert dann, wenn du mit InetGet() von HTTP(S) bzw. FTP die Datei zu einem bestimmten Pfad herunterlädst und diesen Pfad dann dort übergibst.

    Diese Weise macht nur dann Sinn, wenn beim Kompilieren wirklich konsequent an die Versionsnummer denkst, sonst funktioniert das alles nicht wirklich.

    Den Updater müsstest du auf jeden Fall in ein eigenes Programm auslagern und den Prozess des Programms, falls dieser existiert, beenden. Sonst gibt's Probleme mit FileMove, wenn das Programm gerade läuft. Selbst wenn das funktionieren würde, was ich nicht glaube, wäre es kein besonders effizientes Verfahren :)

    Wie es jetzt ja aussieht, musst du bei jedem Update-Check die Datei herunterladen und mit der Methode überprüfen. Ich weiß jetzt nicht, wie groß deine EXE-Datei ist, aber bei einer automatischen Überprüfung macht das auf Dauer meiner Meinung nach weniger Sinn. Sinnvoller wäre es, wenn du bei jedem Upload die Dateiversion in eine INI- bzw. Text-Datei auslagerst und das Programm diese Datei mit der Dateiversion deiner EXE vergleicht, nur vom Speicherplatz/Volumen her :)

    LG

    neben AutoIt jetzt auch noch in C/C++, Java und Python aktiv :)
    Stand 04.04.2018, 13:34


  • Hi,

    ich habe auf Arbeit den Updater wie folgt umgesetzt:

    - Mitarbeiter erhalten die EXE lokal auf Ihrem Rechner in einem definierten Pfad gespeichert

    - Im Autostart hinterlegen wir unsere Updater.exe. Diese prüft dann in Dauerschleife, ob auf dem Netzlaufwerk eine neue Version vorhanden ist. Dies geschieht mittels _Crypt_HashFile (Hash unterschiedlich = neue Version vorhanden). Sprich, ich vergleiche den Hashwerte der Exe vom Netzlaufwerk mit dem Hashwert der lokalen Exe.

    - Wenn ein Update erforderlich ist, folgt noch ein ProcessExists. Daher weis der Updater, ob er direkt die Datei vom Netzlaufwerk in das lokale Verzeichnis kopieren/überschreiben kann oder er bringt dem Mitarbeiter eine GUI, über die er das Update selbstständig anstoßen kann.

    Ich hoffe das Prinzip ist verständlich.

    Vg

  • Also... Falls es nicht um eine exorbitant hohe Nutzerzahl geht und wir nur von einem geschlossenen, internen Netzwerk reden... Pack doch einfach immer die aktuellste EXE in eine Netzwerkfreigabe und erstelle bei den Anwendern nur eine direkte Verknüpfung auf diese Datei. Wenn du dann die Datei auf dem Server aktualisierst, führen alle Nutzer automatisch diese neue Datei aus.

  • Ich hab mal eine kleine Updatefunktion erstellt.

    Es funktioniert so: Du erstellst deinen Ordner. Dort platzierst du beliebig viele .exe Dateien. Diese werden mit der Version benannt. z.B. programm_v1.0.0.exe oder programm_v1.0.2

    Diesen Ordner gibst du in dem Script unten an unter $sProgrammFolder. Wenn du eine neue Version des Programmes erstellst benennst du die Variable $sVersion um auf die neue Version. Dann compilierst du die Datei und benennst sie mit dem _v0.0.0 und verschiebst sie in das Verzeichnis.

    Wird ein Update ausgeführt werden alle Dateien in dem Verzeichnis ausgelesen und auf den Versions String verglichen. Deshalb muss das Muster erhalten bleiben. _v(BELIEBIG VIELE ZAHLEN).(BELIEBIG VIELE ZAHLEN).(BELIEBIG VIELE ZAHLEN).exe ,der Rest ist offen.

    Die Funktion kopiert die Datei, benennt die Datei um, sodass der alte Dateiname erhalten bleibt und startet dieses Programm dann wieder.

    Deinen Code schreibst du dort wo das _makeUpdate() aufgerufen wird. Das kannst du dann auch bei einem Buttonklick,... ausführen.

    Ich hoffe, das ist genau das, was du gesucht hast.

    MfG Kanashius

  • Hi Leute,

    vielen Dank für die zahlreichen Antworten.

    olfibits beim Kompilieren konsequent an die Versionsnummer zu denken ist meiner Meinung nach selbstverständlich.

    Grade dann, wenn man nicht nur für sich selbst an kleinen Tools arbeitet, sondern diese an andere ausliefert und ggf. Support bietet.

    Espyre deine Ausführung habe ich verstanden, muss mir aber genauer anschauen, ob das was für mein Vorhaben ist.

    chesstiger das ist mit Abstand die pragmatischste Variante :P und ist für mein Vorhaben innerhalb des Netzwerks auch echt geeignet. Allerdings hätte ich wohl dazu schreiben sollen, dass ich künftig schon vor habe, das ganze auch weiter auszugeben und dann mit einem richtigen Update zu versehen. Aber die Idee ist natürlich super!

    Kanashius toller Code :love: den schau ich mir gleich noch etwas genauer an und teste es. Du hast genau erfasst was ich möchte :):thumbup:

    Melde mich wieder, sobald Fragen aufkommen oder ich das ganze zum Erfolg führen konnte.

  • In Anlehnung an chesstiger besteht auch die Möglichkeit beim Login die jeweilg aktuelle exe lokal auf den Rechner der Anwender zu laden. Login dauert ja meist sowieso ein wenig ein paar K über moderne Netze stören da meist nicht. So hast Du täglich ohne großen Aufwand die Dateien aktuell auf den Rechnern - wo sie hinsollen. Ja mir ist klar - ein wenig ungewöhnlich - aber das läuft problemlos. Und Du hast immer einen festen Termin - wann Dein Update verteilt ist.


    Gru´ß

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)