Auto(It)-Updater

  • Moin,

    dies ist ein automatischer Updater für AutoIt v3. Er prüft regelmässig einmal pro Stunde
    auf Updates und lädt diese auf Wunsch herunter.

    Bin bis jetzt soweit gekommen... :D

    Auto(It)-Updater v1.0.9.0 24.o8.2oo7

    Setup/Installer

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=E:\AutoIt Projekte\Icons\shell32\shell32_16717.ico
    #AutoIt3Wrapper_outfile=SetupAU3updater.exe
    #AutoIt3Wrapper_Res_Comment=Setup Updater für AutoIt
    #AutoIt3Wrapper_Res_Description=Setup Updater für AutoIt
    #AutoIt3Wrapper_Res_Fileversion=1.0.8.0
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.2.4.9
    Author: Greenhorn

    Script Function:
    Setup
    Auto(It)-Updater v1.0.8

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    FileInstall("AutoIt_Updater.exe", @CommonFilesDir & "\AutoIt3\AutoIt_Updater.exe", 1)
    FileInstall("Uninst.exe", @ProgramFilesDir & "\AutoIt3\Uninst_Updater.exe", 1)
    ; Verknüpfung in der Schnellstartleiste erstellen --> Uploader startet SciTE
    FileCreateShortcut(@CommonFilesDir & "\AutoIt3\AutoIt_Updater.exe", @AppDataDir & "\Microsoft\Internet Explorer\Quick Launch\SciTE", _
    "", "", "", @ProgramFilesDir & "\AutoIt3\SciTE\SciTe.exe")
    ; Registryeinträge für das Kontextmenü vornehmen
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Edit\Command", "", "REG_SZ", _
    '"' & @CommonFilesDir & "\AutoIt3\AutoIt_Updater.exe" & '" "%1"')
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Open\Command", "", "REG_SZ", _
    '"' & @CommonFilesDir & "\AutoIt3\AutoIt_Updater.exe" & '" "%1"')

    [/autoit]

    Main Program

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=..\Icons\updater_1003.ico
    #AutoIt3Wrapper_outfile=C:\Programme\Gemeinsame Dateien\AutoIt3\Au3UPDATER.exe
    #AutoIt3Wrapper_Res_Comment=Automatischer Updater für AutoIt
    #AutoIt3Wrapper_Res_Description=Updater für AutoIt
    #AutoIt3Wrapper_Res_Fileversion=1.0.9.0
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs -------------------------------------------------------------------------------
    ; Auto(It)-Updater v1.0.9
    ;
    ; AutoIt Version: 3.2.4.9
    ; Author: Greenhorn
    ;
    ; Script Function: Self-controlled Update Checker for AutoIt v3.
    ; Starts everytime 'SciTE for AutoIt' is called and checks
    ; every hour for updates while SciTE is running.
    ; Also it installs the Update if you want.
    ;
    ;
    ; Thx to Eddy Erpel for support ;)
    #ce -------------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $cmdline[0] <> 0 Then
    Run(RegRead("HKLM\Software\AutoIt v3\Autoit", "InstallDir") & "\SciTE\SciTE.exe " & '"' & $cmdline[1] & '"') ; Start SciTE
    Else
    ShellExecute(@ProgramFilesDir & "\AutoIt3\SciTE\SciTE.exe") ; Start SciTE
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    RegWrite("HKLM\SOFTWARE\Classes\AutoIt3Script\Shell\Edit\Command", _ ; Registryeinträge bei Programmstart auf SciTE setzen.
    "", "REG_SZ", '"' & @ProgramFilesDir & "\AutoIt3\SciTE\SciTE.exe" & '" "%1"') ; Dies verhindert mehrere Instanzen von AutoIt_Updater.exe
    RegWrite("HKLM\SOFTWARE\Classes\AutoIt3Script\Shell\Open\Command", _ ; beim öffnen von .au3 Dateien
    "", "REG_SZ", '"' & @ProgramFilesDir & "\AutoIt3\SciTE\SciTE.exe" & '" "%1"')

    [/autoit] [autoit][/autoit] [autoit]

    Opt("OnExitFunc", "_Install_Updates")
    Opt("TrayAutoPause", 0)
    Opt("TrayMenuMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("^!u", "_UpdateCheck") ; Control + Alt + u drücken um auf Updates zu prüfen
    Dim $CurrentFileVersion
    Dim $UpdateIni
    Dim $NewVersion
    Dim $Install = 0

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _UpdateCheck() ; Bei Programmstart auf Updates prüfen ...

    [/autoit] [autoit][/autoit] [autoit]

    Do ; Update Automatik - Einmal pro Stunde auf neue Version prüfen ...
    If @MIN = 59 Then _UpdateCheck()
    Sleep(10000)
    Until ProcessExists("SciTE.exe") = 0 ; ... bis SciTE beendet wird.
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _UpdateCheck()
    $Ping = Ping("www.AutoItScript.com", 250)
    If $Ping Then
    $CurrentFileVersion = FileGetVersion(@ProgramFilesDir & "\AutoIt3\AutoIt3.exe")
    $UpdateIni = StringSplit(StringRegExpReplace(_INetGetSource("http://www.autoitscript.com/autoit3/files/beta/update.dat"), @LF, ''),@CR)
    If StringInStr($UpdateIni[2], $CurrentFileVersion) Then
    Sleep(60000)
    Else
    $Date = StringRegExp($UpdateIni[6], '[0-9]', 3)
    $Year = _ArrayToString($Date, '', 0, 3)
    $Month = _ArrayToString($Date, '', 4, 5)
    $Day = _ArrayToString($Date, '', 6, 7)
    $WhatToDo = MsgBox(68, "AutoIt Updates", "Es sind Updates vorhanden!" & @CRLF & "" & @CRLF & _
    "Installierte Version: AutoIT v" & $CurrentFileVersion & @CRLF & "" & @CRLF & _
    "Verfügbare Version: AutoIT v" & $UpdateIni[2] & " (" & $Day & "." & $Month & "." & $Year & ")" & @CRLF & "" & @CRLF & _
    "Updates herunterladen ?")
    Select
    Case $WhatToDo = 6 ; Ja, Updates herunterladen
    InetGet(StringRegExpReplace($UpdateIni[4], 'setup=', ''), _
    @DesktopDir & "\autoit-v" & $UpdateIni[2] & "-setup.exe", 1, 1)
    InetGet("http://www.autoitscript.com/autoit3/files/beta/update.dat", @CommonFilesDir & "\Update.ini")
    While @InetGetActive
    TraySetState(1)
    TrayTip("Downloading", "Bytes = " & @InetGetBytesRead, 10, 16)
    Sleep(250)
    WEnd
    $WhatToDoNow = MsgBox(68, "AutoIt Udates", "Updates wurden heruntergeladen!" & @CRLF & "" & @CRLF & _
    "Sollen die Udates jetzt installiert werden?", 20)
    Select
    Case $WhatToDoNow = 6 ; Ja, Updates installieren
    MsgBox(48, "AutoIt Udates", "Bitte beenden Sie alle Instanzen von SciTE !")
    $Install = 1
    $NewVersion = $UpdateIni[2]
    Case $WhatToDoNow = 7 ; Nein, Updates nicht installieren
    Exit
    EndSelect
    Exit
    Case $WhatToDo = 7 ; Nein, Updates nicht herunterladen
    Exit
    EndSelect
    EndIf
    Else
    Sleep(30000)
    EndIf
    Sleep(30000)
    EndFunc ;==>_UpdateCheck

    [/autoit] [autoit][/autoit] [autoit]

    Func _Install_Updates()
    If FileExists(@DesktopDir & "\autoit-" & $NewVersion & "-setup.exe") And $Install = 1 Then
    ShellExecuteWait(@DesktopDir & "\autoit-" & $NewVersion & "-setup.exe", "/S") ; Silent Installation
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Edit\Command", "", "REG_SZ", _
    '"' & @CommonFilesDir & "\AutoIt3\AutoIt_Updater.exe" & '" "%1"') ; Registryeinträge nach Installation zurücksetzen
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Open\Command", "", "REG_SZ", _
    '"' & @CommonFilesDir & "\AutoIt3\AutoIt_Updater.exe" & '" "%1"')
    MsgBox(64, "AutoIt Udates", "Updates wurden erfolgreich installiert!")
    ;Run(@ProgramFilesDir & '\AutoIt3\SciTE\SciTE.exe')
    Else
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Edit\Command", "", "REG_SZ", _
    '"' & @CommonFilesDir & "\AutoIt3\AutoIt_Updater.exe" & '" "%1"') ; Registryeinträge bei Programmende zurücksetzen
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Open\Command", "", "REG_SZ", _
    '"' & @CommonFilesDir & "\AutoIt3\AutoIt_Updater.exe" & '" "%1"')
    Exit
    EndIf
    EndFunc ;==>_Install_Updates

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region User Defiened Funktions
    Func _ArrayToString(Const ByRef $avArray, $sDelim, $iStart = Default, $iEnd = Default)
    ; Declare local variables.
    Local $iUBound = UBound($avArray) - 1

    [/autoit] [autoit][/autoit] [autoit]

    ; Validate the array
    If ($iUBound + 1) < 2 Or UBound($avArray, 0) > 1 Then Return SetError(1, 0, "")

    [/autoit] [autoit][/autoit] [autoit]

    ; Expand Default parameters
    If $iStart = Default Or $iStart = -1 Then $iStart = 0
    If $iEnd = Default Or $iEnd = -1 Then $iEnd = $iUBound

    [/autoit] [autoit][/autoit] [autoit]

    ; Validate that the start and end indices are valid.
    If ($iStart < 0) Or ($iEnd < 0) Or ($iStart > $iEnd) Then Return SetError(2, 0, "")

    [/autoit] [autoit][/autoit] [autoit]

    ; Make sure that $iEnd <= to the size of the array.
    If ($iEnd > $iUBound) Then
    $iEnd = $iUBound
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $sResult
    ; Combine the elements into the string.
    For $i = $iStart To $iEnd
    $sResult &= $avArray[$i] & $sDelim
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Return StringTrimRight($sResult, StringLen($sDelim))
    EndFunc ;==>_ArrayToString

    [/autoit] [autoit][/autoit] [autoit]

    Func _INetGetSource($s_URL, $s_Header = '')

    If StringLeft($s_URL, 7) <> 'http://' And StringLeft($s_URL, 8) <> 'https://' Then $s_URL = 'http://' & $s_URL

    Local $h_DLL = DllOpen("wininet.dll")

    Local $ai_IRF, $s_Buf = ''

    Local $ai_IO = DllCall($h_DLL, 'int', 'InternetOpen', 'str', "AutoIt v3", 'int', 0, 'int', 0, 'int', 0, 'int', 0)
    If @error Or $ai_IO[0] = 0 Then
    DllClose($h_DLL)
    SetError(1)
    Return ""
    EndIf

    Local $ai_IOU = DllCall($h_DLL, 'int', 'InternetOpenUrl', 'int', $ai_IO[0], 'str', $s_URL, 'str', $s_Header, 'int', StringLen($s_Header), 'int', 0x80000000, 'int', 0)
    If @error Or $ai_IOU[0] = 0 Then
    DllCall($h_DLL, 'int', 'InternetCloseHandle', 'int', $ai_IO[0])
    DllClose($h_DLL)
    SetError(1)
    Return ""
    EndIf

    Local $v_Struct = DllStructCreate('udword')
    DllStructSetData($v_Struct, 1, 1)

    While DllStructGetData($v_Struct, 1) <> 0
    $ai_IRF = DllCall($h_DLL, 'int', 'InternetReadFile', 'int', $ai_IOU[0], 'str', '', 'int', 256, 'ptr', DllStructGetPtr($v_Struct))
    $s_Buf &= StringLeft($ai_IRF[2], DllStructGetData($v_Struct, 1))
    WEnd

    DllCall($h_DLL, 'int', 'InternetCloseHandle', 'int', $ai_IOU[0])
    DllCall($h_DLL, 'int', 'InternetCloseHandle', 'int', $ai_IO[0])
    DllClose($h_DLL)
    Return $s_Buf
    EndFunc ;==>_INetGetSource

    [/autoit] [autoit][/autoit] [autoit]

    #EndRegion User Defiened Funktions

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]

    Uninstall

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.2.4.9
    Author: Greenhorn

    Script Function: Uninstaller
    Auto(It)-Updater v1.0.5

    #ce ----------------------------------------------------------------------------
    #Region AutoIt3Wrapper directives section
    #AutoIt3Wrapper_icon=E:\AutoIt Projekte\Icons\shell32\shell32_33.ico
    #AutoIt3Wrapper_res_comment=Deinstalliert Updater für AutoIt
    #AutoIt3Wrapper_res_description=Deinstalliert Updater für AutoIt
    #AutoIt3Wrapper_res_fileversion=1.0.5.0
    #EndRegion

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #NoTrayIcon
    ; Registryeinträge zurücksetzen wenn AutoIt und SciTE noch installert ist...
    If FileExists(@ProgramFilesDir & "\AutoIt3\AutoIt3.exe") And FileExists(@ProgramFilesDir & "\AutoIt3\SciTE\SciTE.exe") Then
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Edit\Command", "", "REG_SZ", '"' & @ProgramFilesDir & '"\AutoIt3\SciTE\SciTE.exe" "%1"')
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Open\Command", "", "REG_SZ", '"' & @ProgramFilesDir & '"\AutoIt3\SciTE\SciTE.exe" "%1"')
    FileDelete(@CommonFilesDir & "\AutoIt3")
    If @error = 0 Then
    MsgBox(64, "Uninstall", "Deinstallation fehlgeschlagen!" & @CRLF & @CRLF & "AutoIt_Updater.exe konnte nicht gelöscht werden.")
    Else
    MsgBox(64, "Uninstall", "Das Programm wurde erfolgreich deinstalliert!")
    EndIf
    ; Registryeinträge umschreiben wenn AutoIt noch installert ist und ein anderer Editor benutzt wird...
    ElseIf FileExists(@ProgramFilesDir & "\AutoIt3\AutoIt3.exe") And Not FileExists(@ProgramFilesDir & "\AutoIt3\SciTE\SciTE.exe") Then
    MsgBox(64, "Uninstall", "AutoIt ist auf Ihrem System installiert," & @CRLF & @CRLF & "jedoch konnte SciTE nicht gefunden werden." & @CRLF & @CRLF & "Wenn Sie einen anderen Editor benutzen," & @CRLF & "geben sie bitte den Pfad ein.")
    $Editor = FileOpenDialog("Editor suchen", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", "*.exe", 1)
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Edit\Command", "", "REG_SZ", '"' & $Editor & '" "%1"')
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Open\Command", "", "REG_SZ", '"' & $Editor & '" "%1"')
    FileDelete(@CommonFilesDir & "\AutoIt3")
    If @error = 0 Then
    MsgBox(64, "Uninstall", "Deinstallation fehlgeschlagen!" & @CRLF & @CRLF & "AutoIt_Updater.exe konnte nicht gelöscht werden.")
    Else
    MsgBox(64, "Uninstall", "Das Programm wurde erfolgreich deinstalliert!")
    EndIf
    ; Andernfalls alles bereinigen...
    Else
    RegDelete("HKLM\Software\Classes\AutoIt3Script\Shell\Edit\Command")
    RegDelete("HKLM\Software\Classes\AutoIt3Script\Open\Edit\Command")
    FileDelete(@CommonFilesDir & "\AutoIt3")
    If @error = 0 Then
    MsgBox(64, "Uninstall", "Deinstallation fehlgeschlagen!" & @CRLF & @CRLF & "AutoIt_Updater.exe konnte nicht gelöscht werden.")
    Else
    MsgBox(64, "Uninstall", "Das Programm wurde erfolgreich deinstalliert!")
    EndIf
    EndIf
    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]


    Gruß
    Greenhorn

    Edit: funzt hervorragend ! Test bestanden --> 25.o8.2oo7 um o1:oo Uhr Update von 3.2.4.9 auf 3.2.6.0
    :D


    19 Mal editiert, zuletzt von Greenhorn (25. August 2007 um 01:27)

    • Offizieller Beitrag

    Hi!

    Den Dateinamen kannst du in diesem Fall aus der Download-Seite extrahieren (wieder StringRegExp), so machen wir es auch bei der Versionsbox auf der Startseite. Ist halt nicht im jedem Fall so (die Version nicht immer online einsehbar und der Dateiname enthält nicht immer die Versionsnummer).

    peethebee

  • Also im Groben etwa so... !??

    [autoit]

    #include <INet.au3>
    #include <String.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $FileVersion = FileGetVersion(@ProgramFilesDir & "\AutoIt3\AutoIt3.exe")
    MsgBox(64, "Dateiversion", "AutoIt Version " & $FileVersion)

    [/autoit][autoit][/autoit][autoit]

    $source = _INetGetSource("http://www.autoitscript.com/autoit3/downloads.php")
    If StringInStr($source, "autoit-v" & $FileVersion & "-setup.exe") Then
    MsgBox(64, "AutoIt Updates", "Keine Updates vorhanden")
    Else
    $NewVersion = _StringBetween($source, "autoit-v", "-setup.exe")
    MsgBox(64, "AutoIt Updates", "Es sind Updates vorhanden:" & @CRLF & "AutoIT v" & $NewVersion[0])
    InetGet("http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v" & $NewVersion[0] & "-setup.exe", "autoit-v" & $NewVersion[0] & "-setup.exe", 1, 1)
    While @InetGetActive
    TrayTip("Downloading", "Bytes = " & @InetGetBytesRead, 10, 16)
    Sleep(250)
    WEnd
    EndIf
    Exit

    [/autoit]

    Wie kann man das Ganze jetzt automatisieren, also wenn Scite gestartet wird prüfen ob eine Internetverbindung besteht und dann das Update starten...

    Gruß
    Greenhorn


    • Offizieller Beitrag
    Zitat

    Wie kann man das Ganze jetzt automatisieren, also wenn Scite gestartet wird prüfen ob eine Internetverbindung besteht und dann das Update starten...


    [autoit]

    $var = Ping("www.autoit.de")
    If @error = 0 Then
    MsgBox(0, '', 'Verbindung besteht')
    Else
    MsgBox(0, '', 'keine Verbindung')
    Endif

    [/autoit]
  • Danke Eddy,

    bin auf die Idee mit dem Updater auf dem amerik. Board gestoßen...

    Da wurde im Script auch diese .dat benutzt nur wurde im Board gepostet, dass es nicht funzt...
    Glaube der Pfad zur .dat war anders oder so war dat, aber das soll mich nicht daran hindern dat mit dem .dat mal auszuprobieren... :tongue: ;)

    Hast Du nicht vielleicht 'ne Idee, ob man per Registry SciTE irgendwie dazu bringen kann den Updater mitzustarten, oder besser umgekehrt... ?1?

    Habe schon versucht über die 'HKLM\..\..\Classes' was zu drehen, aber funzte natürlich nicht als die .au3 per Kontext mit dem Updater geöffnet werden sollte... :rofl:

    Deswegen erstmal der Umweg über die Schnellstartleiste...

    Wofür sind eigentlich die SciTe- und die SciTEUser.properties da, die sind bei mir beide leer ?!

    Gruß
    Greenhorn

    Edit: Läuft hervorragend damit, Eddy. ;)

    Edit 2:

    Zitat

    Original von Eddy_Erpel

    Einen Updater wird übrigens schon mitgeliefert: [AutoIt3-InstallDir]\AutoIt3\Extras\AutoUpdateIt

    Gruss
    eddy_erpel

    Das hebe ich eben erst gelesen... Da denkt man, man hat die AutoIt)Welt wieder ein wenig leichter gemacht und dann...
    Aber egal, vielleicht bleibe ich doch bei meinem Updater... :D


    2 Mal editiert, zuletzt von Greenhorn (19. Juni 2007 um 19:56)

  • Hi Greenhorn,
    Damit startet bei Skript vor ScitTe...:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.2.4.9
    Author: Greenhorn

    Script Function:
    Auto(It)-Updater v1.0.3

    #ce ----------------------------------------------------------------------------
    #Region AutoIt3Wrapper directives section
    #AutoIt3Wrapper_icon=E:\AutoIt Projekte\Icons\au3.ico
    #AutoIt3Wrapper_res_comment=Automatischer Updater für AutoIt
    #AutoIt3Wrapper_res_description=Updater für AutoIt
    #AutoIt3Wrapper_res_fileversion=1.0.2.0
    #EndRegion


    #NoTrayIcon
    #include <INet.au3>
    #include <String.au3>
    ;ShellExecute(@ProgramFilesDir & "\AutoIt3\SciTE\SciTE.exe")
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Edit\Command","","REG_SZ",'"' & @ScriptFullPath & '" "%1"')
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Open\Command","","REG_SZ",'"' & @ScriptFullPath & '" "%1"')
    if $cmdline[0]<>0 Then
    run(RegRead("HKLM\Software\AutoIt v3\Autoit","InstallDir") & "\SciTE\Scite.exe " & $cmdline[1]) ;Start SciTE
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt("TrayAutoPause", 0)
    Opt("TrayMenuMode", 1)

    HotKeySet("{LCTRL}+{UP}", "_UpdateCheck") ; Left Control + Arrow Up drücken um auf Updates zu prüfen
    Dim $CurrentFileVersion
    Dim $NewFileVersion

    Do ; Update Automatik - Einmal pro Stunde
    If @MIN = 59 Then _UpdateCheck()
    Until ProcessExists("SciTE.exe") = 0
    Exit

    Func _UpdateCheck()
    $Ping = Ping("www.AutoItScript.com", 250)
    If $Ping Then
    $CurrentFileVersion = FileGetVersion(@ProgramFilesDir & "\AutoIt3\AutoIt3.exe")
    ;MsgBox(64, "Dateiversion", "AutoIt Version " & $CurrentFileVersion)
    $Source = _INetGetSource("http://www.autoitscript.com/autoit3/downloads.php")
    If StringInStr($Source, "autoit-v" & $CurrentFileVersion & "-setup.exe") Then
    Sleep(60000)
    Else
    $NewFileVersion = _StringBetween($Source, "autoit-v", "-setup.exe")
    $WhatToDo = MsgBox(68, "AutoIt Updates", "Es sind Updates vorhanden!" & @CRLF & "" & @CRLF & "Installierte Version: AutoIT v" & $CurrentFileVersion & @CRLF & "" & @CRLF & "Verfügbare Version: AutoIT v" & $NewFileVersion[0] & @CRLF & "" & @CRLF & "Updates herunterladen ?")
    Select
    Case $WhatToDo = 6 ; Ja, Updates herunterladen
    InetGet("http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v" & $NewFileVersion[0] & "-setup.exe", @DesktopDir & "\autoit-v" & $NewFileVersion[0] & "-setup.exe", 1, 1)
    While @InetGetActive
    TraySetState(1)
    TrayTip("Downloading", "Bytes = " & @InetGetBytesRead, 10, 16)
    Sleep(250)
    WEnd
    $WhatToDoNow = MsgBox(68, "AutoIt Udates", "Updates wurden heruntergeladen!" & @CRLF & "" & @CRLF & "Sollen die Udates jetzt installiert werden?", 20)
    Select
    Case $WhatToDoNow = 6 ; Ja, Updates installieren
    ShellExecuteWait(@DesktopDir & "\autoit-v" & $NewFileVersion[0] & "-setup.exe", "/S") ; Silent Installation
    MsgBox(64, "AutoIt Udates", "Updates wurden erfolgreich installiert!")
    Case $WhatToDoNow = 7 ; Nein, Updates nicht installieren
    Exit
    EndSelect
    Exit
    Case $WhatToDo = 7 ; Nein, Updates nicht herunterladen
    Exit
    EndSelect
    EndIf
    Else
    Sleep(30000)
    EndIf
    Sleep(30000)
    EndFunc

    [/autoit]

    Gruss
    eddy_erpel

  • Aaaah, die Parameter waren es die fehlten...

    1ooo Dank Eddy, funktioniert auch..., fast ! :D

    Wenn ich nun ein Script per Kontextmenü editieren oder öffnen will, dann öffnet SciTE die Datei mit doppeltem bzw. mit doppelt/geteiltem Pfad !!!
    Dann kann ich über Scite aber alles öffnen...

    Öffnen per Kontextmenü:
    (achte auf die Pfade im Fenstertitel und die Dateinamen !!!)

    [Blockierte Grafik: http://xs216.xs.to/xs216/07253/Look_1.png]

    [Blockierte Grafik: http://xs216.xs.to/xs216/07253/Look_2.png]

    Öffnen mit SciTE:

    [Blockierte Grafik: http://xs216.xs.to/xs216/07253/Look_3.png]

    Komisch nicht ?
    Erst die Datei "E:\AutoIt", dann die Datei "E:\AutoIt Projekte\Auto(It)-Updater\Projekte\Auto(It)-Updater\test.au3" !!!

    Irgendwie mag er das Leerzeichen im Pfad nicht und er macht ihn doppelt... :irre:

    Hmmmmm. *grübel*


    Gruß
    Greenhorn


  • Hi,
    damit läuft es (änderung in Zeile 26):

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.2.4.9
    Author: Greenhorn

    Script Function:
    Auto(It)-Updater v1.0.3

    #ce ----------------------------------------------------------------------------
    #Region AutoIt3Wrapper directives section
    #AutoIt3Wrapper_icon=E:\AutoIt Projekte\Icons\au3.ico
    #AutoIt3Wrapper_res_comment=Automatischer Updater für AutoIt
    #AutoIt3Wrapper_res_description=Updater für AutoIt
    #AutoIt3Wrapper_res_fileversion=1.0.2.0
    #EndRegion


    #NoTrayIcon
    #include <INet.au3>
    #include <String.au3>
    ;ShellExecute(@ProgramFilesDir & "\AutoIt3\SciTE\SciTE.exe")
    MsgBox("",$cmdline[0],$cmdline[1])
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Edit\Command","","REG_SZ",'"' & @ScriptFullPath & '" "%1"')
    RegWrite("HKLM\Software\Classes\AutoIt3Script\Shell\Open\Command","","REG_SZ",'"' & @ScriptFullPath & '" "%1"')
    if $cmdline[0]<>0 Then
    run(RegRead("HKLM\Software\AutoIt v3\Autoit","InstallDir") & "\SciTE\Scite.exe " & '"' & $cmdline[1] & '"') ;Start SciTE
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt("TrayAutoPause", 0)
    Opt("TrayMenuMode", 1)

    HotKeySet("{LCTRL}+{UP}", "_UpdateCheck") ; Left Control + Arrow Up drücken um auf Updates zu prüfen
    Dim $CurrentFileVersion
    Dim $NewFileVersion

    Do ; Update Automatik - Einmal pro Stunde
    If @MIN = 59 Then _UpdateCheck()
    Until ProcessExists("SciTE.exe") = 0
    Exit

    Func _UpdateCheck()
    $Ping = Ping("www.AutoItScript.com", 250)
    If $Ping Then
    $CurrentFileVersion = FileGetVersion(@ProgramFilesDir & "\AutoIt3\AutoIt3.exe")
    ;MsgBox(64, "Dateiversion", "AutoIt Version " & $CurrentFileVersion)
    $Source = _INetGetSource("http://www.autoitscript.com/autoit3/downloads.php")
    If StringInStr($Source, "autoit-v" & $CurrentFileVersion & "-setup.exe") Then
    Sleep(60000)
    Else
    $NewFileVersion = _StringBetween($Source, "autoit-v", "-setup.exe")
    $WhatToDo = MsgBox(68, "AutoIt Updates", "Es sind Updates vorhanden!" & @CRLF & "" & @CRLF & "Installierte Version: AutoIT v" & $CurrentFileVersion & @CRLF & "" & @CRLF & "Verfügbare Version: AutoIT v" & $NewFileVersion[0] & @CRLF & "" & @CRLF & "Updates herunterladen ?")
    Select
    Case $WhatToDo = 6 ; Ja, Updates herunterladen
    InetGet("http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v" & $NewFileVersion[0] & "-setup.exe", @DesktopDir & "\autoit-v" & $NewFileVersion[0] & "-setup.exe", 1, 1)
    While @InetGetActive
    TraySetState(1)
    TrayTip("Downloading", "Bytes = " & @InetGetBytesRead, 10, 16)
    Sleep(250)
    WEnd
    $WhatToDoNow = MsgBox(68, "AutoIt Udates", "Updates wurden heruntergeladen!" & @CRLF & "" & @CRLF & "Sollen die Udates jetzt installiert werden?", 20)
    Select
    Case $WhatToDoNow = 6 ; Ja, Updates installieren
    ShellExecuteWait(@DesktopDir & "\autoit-v" & $NewFileVersion[0] & "-setup.exe", "/S") ; Silent Installation
    MsgBox(64, "AutoIt Udates", "Updates wurden erfolgreich installiert!")
    Case $WhatToDoNow = 7 ; Nein, Updates nicht installieren
    Exit
    EndSelect
    Exit
    Case $WhatToDo = 7 ; Nein, Updates nicht herunterladen
    Exit
    EndSelect
    EndIf
    Else
    Sleep(30000)
    EndIf
    Sleep(30000)
    EndFunc

    [/autoit]

    Gruss
    eddy_erpel

  • JAU !!! das ist es ! :klatschen:

    Nochmals vielen Dank, Eddy ! Du hast mir ein weiteres mal bei einem schier unlösbarem Problem den Knoten in der Birne gelöst... :D

    Jetzt ist es genauso, wie ich es haben wollte: Bei jedem Start dabei und vollautomatisch *ÜberwältigtBin*

    Werde vielleicht noch ein paar kleine Optionen einbasteln, z.B. für DL der .zip's usw. ...


    Bis denne ;)
    Greenhorn


    • Offizieller Beitrag

    Hallo,

    [list=1]
    [*]Hast Du schon mal den definierten Hotkey ausprobiert?

    Ich bezweifel nämlich das der Code funktioniert.

    [autoit]

    HotKeySet("{LCTRL}+{UP}", "_UpdateCheck") ; Left Control + Arrow Up drücken um auf Updates zu prüfen

    [/autoit]

    * man kann Tasten wie {LCTRL} nicht als Hotkey definieren
    * das "+"-Zeichen steht für die Shift-Taste

    So würde es gehen:

    [autoit]

    HotKeySet("^{UP}", "_UpdateCheck") ; Control + Arrow Up drücken um auf Updates zu prüfen

    [/autoit]

    [*]Dein Programm funktioniert nicht bei jedem

    Ich hab mir mal den Code etwas genauer angeschaut und habe festgestellt das dein Programm davon ausgeht das AutoIt im Standardverzeichnis, unter "C:\Programme\AutoIt", installiert ist. Was ist wenn, wie z.B. bei mir, AutoIt aber auf einer anderen Festplatte installiert ist, dann wird nur nicht dein Programm nicht laufen sondern auch AutoIt wird nicht mehr funktionieren, da ja die Pfade auf das Standardverzeichnis verbogen werden.
    [/list=1]

  • Hi Bernd,

    zu 1. :

    ...und ich hab' mich schon gewundert warum da nichts geht ! ;) :D
    Vielen Dak für den Bugfix ! =)

    Ja das mit den Hotkeys ist ein wenig verwirrend für mich...

    zu 2. :

    ...Der Updater ist für eine installierte AutoIt Version gedschrieben, die davon ausgeht, dass der Standard Programme Ordner das Installationsverzeichnis enthält.

    Man kann jedoch die Pfade anpassen wenn man möchte.

    Eine portable Version ist in Planung/Arbeit... ;)


    Gruß
    Greenhorn


    • Offizieller Beitrag

    Hallo,

    Du bräuchtest ja nur

    [autoit]

    $AutoItInstallDir = RegRead("HKLM\Software\AutoIt v3\Autoit", "InstallDir")

    [/autoit]

    zu definieren und alle @ProgramFilesDir durch $AutoItInstallDir zu ersetzen dann kann es jeder benutzen.

    Ansonsten wäre ein Hinweis, in Form einer MsgBox, nicht schlecht!

    Der Text sollte in etwa so lauten:
    "Achtung! Programm nur verwenden wenn AutoIt m Standardordner installiert ist, ansonsten wird AutoIt nicht mehr funktionieren!"