Download der Avast-Free-Offline-Dateien klappt seit ein paar Tagen nicht mehr mit AutoIt ... ?

  • Liebe Profis,

    ich lade seit über einem Jahr sehr häufig den jeweils aktuellen Offline-Installer für Avast Free Antivirus mittels AutoIt herunter.

    Dafür nutze ich folgenden Link: "https://bits.avcdn.net/productfamily_ANTIVIRUS/insttype_FREE/platform_WIN/installertype_FULL/build_RELEASE/cookie_mmm_ava_998_999_000_m"

    Bisher klappte dies auch stets einwandfrei, seit ein paar Tagen wird jedoch nichts mehr heruntergeladen. der Programmcode (s.u.) ist 1:1 aus der Hilfe und wurde nicht verändert!

    Gibt man die URL direkt in den Browser (getestet mit FireFox und Opera) ein, startet der Download ohne Probleme.

    Da der Download der Virusdefinitionen ("https://www.avast.com/de-de/download-thank-you.php?product=VPS18&locale=de-de&direct=1") mit AutoIt nach wie vor einwandfrei funktioniert,

    kann ich mir das nicht erklären. Wäre jemand mal so nett zu testen, ob der Fehler nur bei mir auftritt / bzw. hat jemand eine Idee, wie das Problem(chen) lösen kann, ich habe leider überhaupt keinen Schimmer.

    Besten Dank im Vorraus! MfG Kilo


    Spoiler anzeigen

    #include <InetConstants.au3>

    #include <MsgBoxConstants.au3>


    Avast_Offline_Installer()

    Func Avast_Offline_Installer()

    ; Save the downloaded file to the temporary folder.

    Local $sFilePath = @TempDir & "\Avast_Offline.exe"

    ; Download the file in the background with the selected option of 'force a reload from the remote site.'

    Local $hDownload = InetGet("https://bits.avcdn.net/productfamily_ANTIVIRUS/insttype_FREE/platform_WIN/installertype_FULL/build_RELEASE/cookie_mmm_ava_998_999_000_m", @TempDir & "\Avast_Offline.exe", $INET_FORCERELOAD, $INET_DOWNLOADBACKGROUND)

    ; Wait for the download to complete by monitoring when the 2nd index value of InetGetInfo returns True.

    Do

    Sleep(250)

    Until InetGetInfo($hDownload, $INET_DOWNLOADCOMPLETE)

    ; Retrieve the number of total bytes received and the filesize.

    Local $iBytesSize = InetGetInfo($hDownload, $INET_DOWNLOADREAD)

    Local $iFileSize = FileGetSize($sFilePath)

    ; Close the handle returned by InetGet.

    InetClose($hDownload)

    ; Display details about the total number of bytes read and the filesize.

    MsgBox($MB_SYSTEMMODAL, "", "The total download size: " & $iBytesSize & @CRLF & _

    "The total filesize: " & $iFileSize)

    EndFunc

  • Prüfe nach jeder Funktion den Rückgabewert und @error bzw. @extended. So siehst Du zumindest, welcher Fehler wo auftritt.
    Wirf einen kritischen Blick in der Hilfe, dort siehst Du beschrieben, was die Fehlercodes bedeuten :)

  • water:

    Der Tipp ist soweit prima, aber wo in der Hilfe kann ich die Erläuterungen zu den @Error / @Extended - Codes finden?

    Weder die letzten 3,5 Std in div. Foren noch die Google-Suche haben mich (als NIcht-Profi!) wirklich weiter gebracht ...

    Bytes read: 0

    Size: 0

    Complete: True

    successful: False

    @error: 13

    @extended: 12029

  • Ich habe mal im engl. Forum gesucht und das Ergebnis lautet: INTERNET_CANNOT_CONNECT: The attempt to connect to the server failed.

    Das ist das Ergebnis der Funktion aus diesem Thread (letzter Post): https://www.autoitscript.com/forum/topic/136249-inetget-fails/

  • @kilo , bei mir funktioniert dein Script einwandfrei.

    Die Datei wird anstandslos heruntergeladen.

    Da der Download im Browser funktioniert, teste ein anderes, definitiv von AutoIt beschreibbares Verzeichnis zum Speichern der Download-Datei.

    Starte auch mal dein Script aus einem anderen Verzeichnis/Laufwerk.

    Teste bei InetGet() (s. in der Hilfe dazu) auch den Parameter $INET_IGNORESSL (2) = Ignore all SSL errors (with HTTPS connections).

  • Falls du mehrere Antivirenprogramme hast macht dir vllt. auch Avast probleme

    Da der Download ja von den Browsern funktioniert, könnte ggf. das (dieses eine) Autoitscript vom aktuellen Virenscanner geblockt werden.

    ALLE Virenscanner ausschalten und dann das Script testen.

  • Liebe Profis,

    vielen Dank für Eure Antworten und Bemühungen! Ich habe mittlerweile alle Eure Tipps ausprobiert und darüber hinaus das Script in VirtualBox

    auf einem komplett "nackten" Windows laufenlassen, um jegliche "Außeneinflüsse" (Antivirenprogramm, Firewall, usw.) komplett auszuschließen.

    Das Ergebnis bleibt bei mir immer negativ, auch ein Testlauf auf meinem Laptop verlief ohne Erfolg.

    Da der Download der Virusdefinitionen ganz normal funktioniert, während der Programmdownload immer scheitert, habe ich beide Scripte testweise
    vereint (siehe Spoiler), um für Speicherort, Zugriffsrechte, etc. bei beiden Downloads die gleichen Bedingungen zu haben. Fazit: Virusdefinitonen klappt,

    Programmdatei scheitert ...

    Hat noch jemand eine Idee? Ich würde nur ungern den "Umweg" über den Download per Browser gehen.

    Beste Grüße Kilo

    Spoiler anzeigen

    #include <File.au3>

    #include <INet.au3>

    #Include <WinAPI.au3>


    For $Update = 1 To 2

    If $Update = 1 Then

    $Dat = "vpsupd.exe"

    $www = "https://www.avast.com/de-de/download-thank-you.php?product=VPS18&locale=de-de&direct=1"

    ElseIf $Update = 2 Then

    $Dat = "avast_free_antivirus_setup_offline.exe"

    $www = "https://bits.avcdn.net/productfamily_ANTIVIRUS/insttype_FREE/platform_WIN/installertype_FULL/build_RELEASE/cookie_mmm_ava_998_999_000_m"

    EndIf


    Local $sFilePath = @TempDir & "\" & $Dat

    ; Download the file in the background with the selected option of 'force a reload from the remote site.

    Local $hDownload = InetGet($www, $sFilePath, $INET_FORCERELOAD, $INET_DOWNLOADBACKGROUND)

    ; Wait for the download to complete by monitoring when the 2nd index value of InetGetInfo returns True.

    Do

    Sleep(500)

    Until InetGetInfo($hDownload, $INET_DOWNLOADCOMPLETE)


    ; Retrieve the number of total bytes received and the filesize.

    Local $iBytesSize = InetGetInfo($hDownload, $INET_DOWNLOADREAD)

    Local $iFileSize = FileGetSize($sFilePath)

    Local $aData = InetGetInfo($hDownload)

    If @error Then Return SetError(1, 0, FileDelete($sFilePath)) ; If an error occurred the return from the function and delete the file.

    ; Display details about the downloaded file.

    MsgBox($MB_SYSTEMMODAL, "", "Bytes read: " & $aData[$INET_DOWNLOADREAD] & @CRLF & _ ; Or use 0 instead of the constant.

    "Size: " & $aData[$INET_DOWNLOADSIZE] & @CRLF & _ ; Or use 1 instead of the constant.

    "Complete: " & $aData[$INET_DOWNLOADCOMPLETE] & @CRLF & _ ; Or use 2 instead of the constant.

    "successful: " & $aData[$INET_DOWNLOADSUCCESS] & @CRLF & _ ; Or use 3 instead of the constant.

    "@error: " & $aData[$INET_DOWNLOADERROR] & @CRLF & _ ; Or use 4 instead of the constant.

    "@extended: " & $aData[$INET_DOWNLOADEXTENDED] & @CRLF) ; Or use 5 instead of the constant.


    ; Retrieve the number of total bytes received and the filesize.

    $erg = InetGetInfo($hDownload, $INET_DOWNLOADREAD)

    ConsoleWrite("Downloadgröße " & $Dat & ": " & $erg & @CRLF)

    ; Close the handle returned by InetGet.

    InetClose($hDownload)

    Sleep(1000)

    Next

  • Bei mir (Win10/Keine Firewall/Kein Antivirus) funktioniert es auch ohne Probleme. Also geb ich dir noch was zum nachschauen:

    Hast du dabei auch die Windows-Firewall UND den Windows-Defender (Integrierter Virenschutz von Windows) schon ausgeschaltet?

    Hast du einen Router/Firewall/.... , die das Blockieren könnte?

    Hat dein DNS resolver ein Problem, die Domain aufzulösen? => ping mal bits.avcdn.net

    Nutzt Avast Cloudflare oder ähnliches, sodass eventuell die IP gesperrt wurde (Wurde schon teilweise bei Urheberrechtsverletzungen in Österreich gemacht (auch wenn das wieder rückgängig gemacht wurde, meine ich))?

    Ne Überlegung: Brauchst du Avast wirklich? Der Windows-Defender ist mitlerweile genausogut wie andere Antivirenprogramme, aufgrund der großen Reichweite (überall mit Windows vorinstalliert) vermutlich sogar besser, deshalb lohnt es sich eigentlich nicht, den zu ersetzen.

  • Das Ergebnis bleibt bei mir immer negativ, auch ein Testlauf auf meinem Laptop verlief ohne Erfolg.

    Ok, es scheint damit in die von Kanashius angegebene Richtung zu gehen.

    Probiere mal folgendes:

    Wenn du ein Smartphone hast, deaktiviere dort das WLAN (Verbindung zu deinem Router) und aktiviere die Datenverbindung und das sog. Tethering, um das Smartphone als WLAN-Hotspot deinem Laptop zur Verfügung zu stellen.

    Verbinde deinen Laptop nun mit dem vom Smartphone bereitgestellten WLAN und teste das Script.

    Ersetze die "Warteschleife" im Script durch diese, um den Download zu registrieren:

    AutoIt
        Do
            Sleep(2500)
            $iBytesSize = InetGetInfo($hDownload, $INET_DOWNLOADREAD)
            ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iBytesSize = ' & $iBytesSize & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
        Until InetGetInfo($hDownload, $INET_DOWNLOADCOMPLETE)

    Wenn der Download funktioniert, d.h. Daten in der Scite-Console angeteigt werden, kannst du das Script abbrechen.

    Somit hast du deinen Router und/oder deinen Provider als "Schuldigen" festgestellt.

    Wenn das auch nicht funktioniert, ggf. weil dein Provider den Internetzugang für den Router und das Smartphone bereitstellt, ist es Zeit dort bei der Störungsstelle anzurufen.

    Btw., hast du in letzter Zeit AutoIt geupdatet? Lädst du von einer Privatadresse oder aus einem Firmennetzwerk?

    Ansonsten probiere mal dieses Script:

    Ich habe die CMD für dieses Beispiel sichtbar gemacht und auch die -s (silent) Option ausgeschaltet, so dass man den Download verfolgen kann

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (5. Mai 2023 um 08:33)

  • Das klingt ja wirklich ziemlich merkwürdig.
    Anhand deiner Versuche versuche ich mal zusammenzufassen und auszuschließen:

    • andere Programme auf dem Rechner können downloaden --> es ist keine geblockte IP
    • Anderer Rechner + VM ohne Virenscanner --> BS-Config und Virenscanner ist es nicht
    • Bei allen anderen funktioniert das gleiche Skript --> kein Skriptproblem oder AutoIt-seitiges Problem


    Was ich als nächstes versuchen würde:

    • Bei Firefox in den Entwicklertools mal schauen, welchen User-Agent dieser beim Request mitsendet und diesen in AutoIt per HTTPSetUserAgent() auch setzen.
    • Den Download im Internet Explorer (nicht Edge!) probieren - Hintergrund: InetGet nutzt gemeinsame Libs mit dem IE.
    • Download per curl: Ist in Windows mittlerweile eingebaut (neueste Version gibt es >>hier<<). Wenn es funktioniert ließe sich der Download hierüber im Skript realisieren - Beispiel:

    Edit: Tja da war ich mit meiner curl-Idee wohl einen Tick zu spät :S

  • @kilo

    Also, ich habe es mir angesehen und nichts daran verändert aber bei mir läuft das Skript nicht.
    Aber komisch das es bei den anderen sofort geklappt hat, aber auch super das du dieses Thema geöffnet hast.
    Weil ich grad an einem großen Skript bin das ich von IE auf Webdriver umbaue und da hab ich mich gefragt wie mache ich das eigentlich falls jemand eine falsche Version von Edge hat, die nicht auf den Webdriver passt.

    Und jetzt kommt wieder AspirinJunkie um die Ecke und haut da wieder einen raus.

    AspirinJunkie dein Skript funktioniert bei mir sofort, konnte es auch ganz einfach anpassen an meine Bedürfnisse Super Arbeit! :klatschen:

  • Naja eigentlich ist wirkliche Problem noch nicht geklärt.
    Die curl-Variante ist ja nur ein Workaround bzw. ein Test ob es damit geht.
    Wirklich weiter bei der Frage warum es mit InetGet nicht klappt, bringt uns das jetzt nicht.

    Aber klar - man kann prinzipiell bei sowas auf curl umsteigen.
    Dann wäre es aber sinnvoll wenn man die Funktion noch so erweitert, dass während des Downloads die Fortschrittsdaten ausgewertet werden können.
    Ich hab das mal über eine Callback-Funktion gelöst, so kann der User selbst bestimmen wie und was er davon verwendet:

  • Und jetzt kommt wieder AspirinJunkie um die Ecke und haut da wieder einen raus.

    Indem er das Script aus einem Post obendrüber kopiert hat?! :P Zwei Doo*** und ein Gedanke :love:

    "Rausgehauen" hat er jedenfalls (wieder mal) ein schönes Script für die Integration von Konsolenprogrammen in ein Windows-basiertes AutoIt! :thumbup:

    Naaa. alles gut. Ich hatte Curl schon öfter verwendet, gerade der -L Parameter hat mir schon einige Male weitergeholfen.

    Jetzt ist nur noch die spannende Frage, ob @kilo auch zu einem positiven Ergebnis kommt?!

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (6. Mai 2023 um 13:07)

  • Hallo liebe Profis,

    ich war ein paar Tage beruflich unterwegs und habe leider keine Zeit zum Antworten gefunden, dies möchte ich aber nun nachholen.

    Zunächst einmal herzlichen Dank für Eure Antworten, Tipps und Tricks! Ich bin fast ein wenig froh, dass sich noch jemand gefunden

    hat, bei dem der Download auch nicht klappt ... Damit ist bei mir die Gefahr des Fehlers 30 geringer (Fehler befindet 30 cm vor der
    Tastatur ;) )

    Da ich meine Dienstreise per Zug angetreten habe, hatte dies den Vorteil, dass ich eigenen Router, IP-Probleme etc. als Fehlerquelle

    ausschließen kann, da der Fehler auch im DB-Hotspot sowie im Hotel auftrat. Gleiches gilt für meinen PC und mein Laptop, da ich auf
    der Reise ein anderes benutzt habe. Ich bin auch nirgendwo angemeldet (kein Avast-Account, keine Cloud-Dienste, o.ä.). Windows-

    Defender / Firewall wurden abgeschaltet und kommen somit auch nicht als Bremse infrage.

    Gemäß des Ausschlussverfahrens nach Pierce (bekannt durch Sherlock Holmes) bleiben eigentlich nur noch der Avast-Server und AutoIt
    selber als mögliche Fehlerursache übrig. Da ich aber die Virusdefenitionen per AutoIt herunterladen kann und "nur" der Download des
    Programmteils scheitert, ist das auch irgendwie unlogisch ... ?! Ich habe zumindest keine Erklärung.


    Eine Bitte an ApirinJunkie:

    Ich habe den Einsatz von Curl nicht hinbekommen. Download der Version (Windows 32 Bit) kein Problem, aber wie wird das Programm

    installiert / eingebunden? In den FAQ stand: Nutzen Sie die "Install-exe", die konnte ich aber weder im Zip noch entpackten Ordner finden ...

    Insofern konnte ich Deine anderen Tipps leider noch nicht testen, was ich aber unbedingt noch versuchen möchte!

    MfG Kilo

  • Ich habe den Einsatz von Curl nicht hinbekommen. Download der Version (Windows 32 Bit) kein Problem, aber wie wird das Programm

    installiert / eingebunden?

    Welche Windows-Version nutzt du denn?
    In neueren Versionen von Windows 10 ist curl bereits so enthalten - da musst du nix downloaden, das sollte ad-hoc funktionieren.

    Ansonsten lädtst du halt die zip-Datei aus dem Link herunter und dort findet sich im Unterordner bin die Datei curl.exe.
    Diese entweder mit in das Verzeichnis vom Skript schmeißen oder in einen Pfad, welcher in der Path-Umgebungsvariable steht sodass die exe von anderen Programmen gefunden werden kann.

    Ansonsten noch: Welche Version von Autoit verwendest du?

  • bei mir funktioniert der Download mit folgendem Script auch. Aber die heruntergladene Datei hat die Endung .tmp nicht .exe

    @MojoeB

    Ich nutze den Webdriver.exe mit Google Chrome und benenne die jeweilige Webdriver.exe entsprechend der Webdriver Version um "webdriver_113.exe" um.

    Im Script wird dann die Version vom Webdriver und Chrome abgefragt.

    Gruß gmmg

    2 Mal editiert, zuletzt von gmmg (8. Mai 2023 um 10:58)

  • AspirinJunkie:

    Ah ok, das hatte ich nicht richtig verstanden, einfach die Curl.exe in den Script-Pfad ... probiere ich heute abend. Dann sind die FAQ "unglücklich" formuliert, da ist von einer

    "Install-Exe" die Rede ... dann kann ich natürlich lange suchen.

    Zu WIndows / AutoIt: Ich selbst arbeite überwiegend in virtuellen Maschinen (VM-Ware und VirtualBox) und ich habe es mit Test-Versionen von Windows 7, 10 und 11 probiert.

    Habe es aber auch am Laptop und bei einem Freund auch in "Live"-Systemen getestet ... Immer der gleiche Fehler => kein Download.

    Getestete Auto-It Versionen sind 3.3.12 ; 3.3.14.5 ; 3.3.16.1 - Scite: 3.4.4 und 4.4.6

    Ich erwähne die virtuellen Maschinen immer nur ungern, weil einige dann sagen " na is ja klar, dass liegt daran ..." und gar nicht weiterlesen wenn ich schreibe: Aber auch im
    Live-System getestet.

    Zumal versuche ich auch immer erstmal alle anderen Fehlerquellen (AV-, Firewall- und sonstige Programme) auszuschließen, dass ist für mich selbstverständlich, bevor ich Profis

    in einem Forum mit meinen "Problemchen" behellige.

  • Mit Curl klappt es! Schön, dass ich es nicht über den Browser downloaden muss.

    Besten Dank an alle die geantwortet haben!