INI-Updater mit automatischer Änderung der Versions-Datei

  • Hallo,
    wollte euch mal fragen, wie Ihr meine Lösung findet...

    Ziel war, eine auf einem FTP-Server befindliche verschlüsselte Datei zu bearbeiten und wieder hoch zu stellen. Auch sollte bei jeder Bearbeitung die im gleichen Verzeichnis auf dem Server befindliche TXT im Zähler um einen Punkt hoch gesetzt werden.

    Als Ansatz habe ich das Script von @wollferness benutzt und für meine Zwecke umgebaut.
    somit können wir problemlos die INI erweitern und wieder verschlüsselt hoch stellen.

    Spoiler anzeigen
    [autoit]


    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=..\GPW.ico
    #AutoIt3Wrapper_outfile=GPW-Ini-Updater_Beta5\GPW-Ini-Updater_V1.exe
    #AutoIt3Wrapper_Res_Comment=Programm zum Auslesen und erneuern der GPW.ini
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.2
    #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
    #AutoIt3Wrapper_Res_LegalCopyright=GoPalWorld
    #AutoIt3Wrapper_Res_SaveSource=y
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_Field=Made by|Pitter (c)
    #AutoIt3Wrapper_Run_Tidy=y
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;====================================================
    ;============= GPW-INI-Updater =============
    ;====================================================
    ; AutoIt version: 3.3.360
    ; Language: Deutsch
    ; Author: Pitter (c) by Idea from @wolfferness
    ;
    ; ----------------------------------------------------------------------------
    ; Script Start
    ; ----------------------------------------------------------------------------
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <Constants.au3>
    #include <IE.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <GuiButton.au3>
    #include <GUIConstants.au3>
    #include <String.au3>
    #include <FTPEx.au3>
    #include <Debug.au3>

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

    _Main()

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

    Func _Main()

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

    Local $UpDownLevel

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

    #forceref $UpDownLevel
    $encr = 0

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

    $WinMain = GUICreate('GPW-INI-Updater V1', 800, 600) ;~ Fenstertitel setzen
    GUISetBkColor(0xA6CAF0) ;~ Hintergrundfarbe setzen
    $EditText = GUICtrlCreateEdit('', 10, 100, 590, 265) ;~ Editor-Fenster setzen
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\Installer-Grafik_oben.jpg", 10, 5, 590, 90, BitOR($SS_NOTIFY, $SS_SUNKEN, $WS_GROUP, $WS_CLIPSIBLINGS), $WS_EX_CLIENTEDGE)
    ;~ Logo platzieren
    ;######## Passwort für die INI-Datei
    $InputPass = 'TEST'
    $InputLevel = '2'

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

    ;######## Buttons generieren
    $EndButton = GUICtrlCreateButton('Beenden', 644, 536, 107, 50, 0, $WS_EX_CLIENTEDGE)
    $Group1 = GUICtrlCreateGroup("Dateien bearbeiten", 616, 10, 167, 495, $BS_FLAT, $WS_EX_CLIENTEDGE)
    $ReadButton = GUICtrlCreateButton("Download", 644, 56, 107, 60, 0, $WS_EX_CLIENTEDGE)
    $EncryptButton = GUICtrlCreateButton('Verschlüsseln', 644, 274, 107, 60, 0, $WS_EX_CLIENTEDGE)
    $DecryptButton = GUICtrlCreateButton('Entschlüsseln', 644, 168, 107, 60, 0, $WS_EX_CLIENTEDGE)
    $SendButton = GUICtrlCreateButton('Veröffentlichen', 644, 384, 107, 60, 0, $WS_EX_CLIENTEDGE)

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

    ;~####### FTP-Daten
    $server = 'testserver.de'
    $username = 'anonym'
    $pass = 'anonym'
    $path = '/Zielverzeichnis/'

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

    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE ;~ Wenn man oben auf das X klickt
    ExitLoop ;~ Schleife verlassen und schliessen

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

    Case $ReadButton ;~ Dateien einlesen
    ;###### Beginn Download der INI und der Update.txt
    $DownloadFile_1 = (@ScriptDir & "\GPW.ini") ;~ Pfad in Var schreiben
    $DownloadFile_2 = (@ScriptDir & "\Update.txt") ;~ dito
    $Ftp_FileName_1 = "GPW.ini" ;~ Dateiname in Var schreiben
    $Ftp_FileName_2 = "Update.txt" ;~ dito
    $Open = _FTP_Open('MyFTP Control') ;~ Öffne FTP
    $label_4 = GUICtrlCreateLabel("FTP wird geöffnet...", 10, 520, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    Sleep(500)
    $label_1 = GUICtrlCreateLabel("Verbinde mit Server: " & $server & " Username: " & $username & " Passwort: " & " Passwort: " & $pass, 10,400, 585,30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    $Conn = _FTP_Connect($Open, $server, $username, $pass) ;~ Verbinden mit dem FTP
    GUICtrlDelete($label_4)
    $label_4 = GUICtrlCreateLabel("Anmelden am Server....", 10, 520, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    Sleep(500)

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

    $FtpDir = _FTP_DirSetCurrent($Conn, $path) ;~ Wechseln des Standart-Verzeichnisses
    GUICtrlDelete($label_4)
    $label_4 = GUICtrlCreateLabel("Wechseln in den Ordner: " & $path, 10, 520, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    Sleep(500)

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

    Local $Ftpd_1 = _FTP_ProgressDownload($Conn, $DownloadFile_1, $Ftp_FileName_1) ;~ Download mit Progressbar
    Local $Ftpd_2 = _FTP_ProgressDownload($Conn, $DownloadFile_2, $Ftp_FileName_2) ;~ Download mit Progressbar
    GUICtrlDelete($label_4)
    GUICtrlDelete($label_1)
    If $Ftpd_1 = 1 And $Ftpd_2 = 1 Then ;~ Kontrolle, ob beide Files da sind
    GUICtrlDelete($label_4)
    $label_5 = GUICtrlCreateLabel("Dateien wurden erfolgreich geladen.", 10, 560, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    Sleep(500)
    Local $Ftpc = _FTP_Close($Open) ;~ FTP wieder schliessen
    If FileExists($DownloadFile_1) And FileExists($DownloadFile_2) Then ;~ Wenn beidse Files da sind
    $file = FileOpen(@ScriptDir & "\GPW.ini", 0) ;~ öffne INI zum lesen
    $chars = FileRead($file) ;~ Datei auslesen
    GUICtrlSetData($EditText, $chars) ;~ Dateiinhalt in Textbox schreiben
    FileClose($file) ;~ INI schliessen
    GUISetState(@SW_ENABLE, $WinMain) ;~ Fenster zum Bearbeiten aktivieren
    EndIf
    Else
    GUICtrlDelete($label_1)
    $label_5 = GUICtrlCreateLabel("DATEIEN WURDEN NICHT GELADEN!", 10, 560, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    Local $Ftpc = _FTP_Close($Open)
    Sleep(3000)
    EndIf
    GUICtrlDelete($label_4)
    $label_1 = GUICtrlCreateLabel("INI-Datei eingelesen", 10, 400, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    $label_2 = GUICtrlCreateLabel("Bitte INI-Datei entschlüsseln und editieren!", 10, 440, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))

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

    $encr = 0 ;~ Kontrolle, ob verschllüsselt wurde auf False (0) setzen

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

    Case $EncryptButton ;~ Verschlüsselung
    GUICtrlDelete($label_1)
    GUICtrlDelete($label_2)
    GUICtrlDelete($label_5)
    GUISetState(@SW_DISABLE, $WinMain) ;~ Fenster deaktivieren
    $string1 = GUICtrlRead($EditText) ;~ Text aus dem Textfenster lesen
    GUICtrlSetData($EditText, 'Bitte warten, INI wird verschlüsselt!')
    GUICtrlSetData($EditText, _StringEncrypt(1, $string1, $InputPass, $InputLevel)) ;~ Inhalt verschlüsseln und ab ins Fenster
    $chars1 = GUICtrlRead($EditText) ;~ Fenster auslesen
    $inifile = FileOpen(@ScriptDir & "\GPW.ini", 2) ;~ alte INI-Datei öffnen
    FileWrite($inifile, $chars1) ;~ Inhalt des Fensters in die alte INI schreiben
    FileClose($inifile) ;~ Neue INI schliessen
    GUICtrlSetData($EditText, $chars1) ;~ und zur Kontrolle noch mal ins Fenster
    GUISetState(@SW_ENABLE, $WinMain) ;~ Fenster wieder aktivieren
    $encr = 1 ;~ Kontrolle, ob verschlüsselt wurde auf True (1) setzen
    $label_5 = GUICtrlCreateLabel("INI wurde verschlüsselt.", 10, 560, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    $label_2 = GUICtrlCreateLabel("Bitte INI-Datei veröffentlichen!", 10, 440, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))

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

    Case $DecryptButton ;~ Entschlüsselung
    GUICtrlDelete($label_2)
    GUICtrlDelete($label_5)
    GUISetState(@SW_DISABLE, $WinMain) ;~ Fenster deaktivieren
    $string2 = GUICtrlRead($EditText) ;~ Fenster auslesen
    GUICtrlSetData($EditText, 'Bitte warten, INI wird entschlüsselt!')
    GUICtrlSetData($EditText, _StringEncrypt(0, $string2, $InputPass, $InputLevel)) ;~ Fenstertext entschlüsseln
    $chars2 = GUICtrlRead($EditText) ;~ Fenster auslesen
    $inifile2 = FileOpen(@ScriptDir & '\GPW.ini', 2) ;~ INI öffnen
    FileWrite($inifile2, $chars2) ;~ Fensterinhalt in die INI schreiben
    FileClose($inifile2) ;~ INI schliessen
    GUISetState(@SW_ENABLE, $WinMain) ;~ Fenster aktivieren
    $encr = 0
    $label_5 = GUICtrlCreateLabel("INI wurde entschlüsselt.", 10, 560, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    $label_2 = GUICtrlCreateLabel("Nach dem Editieren, bitte INI wieder verschlüsseln!", 10, 440, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))

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

    Case $SendButton
    GUISetState(@SW_DISABLE, $WinMain) ;~ Fenster deaktivieren, um Änderungen zu vermeiden
    GUICtrlDelete($label_2)
    If $encr = 1 Then
    $sString = FileReadLine(@ScriptDir & "\Update.txt", 2) ;~ 2. Zeile auslesen
    $VersionText = $sString ;~ Kontrolle, ob INI nicht leer ist
    If $VersionText = "" Then ;~ Wenn leer, dann Msgbox
    MsgBox(0, "Fehler", "Update.txt nicht gefunden, Programm wird beendet!", 30)
    Exit
    Else
    $label_2 = GUICtrlCreateLabel("Online-Version ist: " & $sString, 10, 440, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    $aSplit = StringSplit($sString, ".", 2) ;~ Splitten des Strings nach Teiler "."

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

    $aSplit[3] += 1 ;~ Erhöhen des 4.Wertes um 1

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

    $sString = "" ;~ String leer bereitstellen

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

    For $i = 0 To UBound($aSplit) - 1 ;~ Schleife zum Zusammensetzen des neuen Strings
    $sString &= $aSplit[$i] & "." ;~ Zusammensetzen des Stings
    Next

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

    $sString = StringTrimRight($sString, 1) ;~ Entfernen des letzen Teilers am Ende des Strings
    $label_3 = GUICtrlCreateLabel("Update-Version ist: " & $sString, 10, 480, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))

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

    _FileWriteToLine(@ScriptDir & "\Update.txt", 2, $sString, 1) ;~ Neuen String in Zeile 2 der Update.txt schreiben und Zeile überschreiben (1)

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

    ;####### Beginn Upload der neuen Dateien
    $UploadFile = (@ScriptDir & "\GPW.ini") ;~ Pfad der INI in Var schreiben
    $UploadFile_2 = (@ScriptDir & "\Update.txt") ;~ Pfad der Update.txt in Var schreiben
    $Ftp_FileName = "GPW.ini" ;~ Dateiname in Var schreiben
    $Ftp_FileName_2 = "Update.txt" ;~ dito
    $Open = _FTP_Open('MyFTP Control') ;~ FTP öffnen
    $label_4 = GUICtrlCreateLabel("FTP wird geöffnet...", 10, 520, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    Sleep(500)

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

    $Conn = _FTP_Connect($Open, $server, $username, $pass) ;~ mit FTP-Server verbinden
    GUICtrlDelete($label_4)
    $label_4 = GUICtrlCreateLabel("Anmelden am Server....", 10, 520, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    Sleep(500)

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

    $FtpDir = _FTP_DirSetCurrent($Conn, $path) ;~ FTP-Pfad setzen
    GUICtrlDelete($label_4)
    $label_4 = GUICtrlCreateLabel("Wechseln in den Ordner: " & $path, 10, 520, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    Sleep(500)
    GUICtrlDelete($label_4)
    Local $Ftpp = _FTP_ProgressUpload($Conn, $UploadFile, $Ftp_FileName) ;~ Datei mit Progressbar hochladen
    Local $Ftpp_2 = _FTP_ProgressUpload($Conn, $UploadFile_2, $Ftp_FileName_2) ;~ dito
    GUICtrlDelete($label_4)

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

    If $Ftpp = 1 Then ;~ Rückmeldung vom Server
    GUICtrlDelete($label_5)
    $label_5 = GUICtrlCreateLabel("Dateien wurden erfolgreich hoch geladen.", 10, 560, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    Sleep(1500)
    Else
    GUICtrlDelete($label_5)
    $label_5 = GUICtrlCreateLabel("DATEIEN WURDEN NICHT HOCHGELADEN!", 10, 560, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    Sleep(3000)
    EndIf

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

    Local $Ftpc = _FTP_Close($Open) ;~ FTP schliessen
    GUICtrlDelete($label_4)
    $label_4 = GUICtrlCreateLabel("FTP-Verbindung geschlossen!", 10, 520, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    Sleep(3000)
    GUICtrlDelete($label_2)
    GUICtrlDelete($label_3)
    GUICtrlDelete($label_4)
    GUICtrlDelete($label_5)
    $encr = 0
    EndIf
    Else
    MsgBox(0, " Fehler", "INI vor dem Hochladen bitte verschlüsseln!!!")
    Sleep(1000)
    GUICtrlDelete($label_1)
    $encr = 0
    EndIf
    GUISetState(@SW_ENABLE, $WinMain)
    GUICtrlDelete($label_2)
    GUICtrlDelete($label_4)
    GUICtrlDelete($label_5)
    $label_4 = GUICtrlCreateLabel("Fertig....", 10, 520, 585, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))

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

    Case $EndButton
    Return
    EndSwitch
    WEnd
    EndFunc ;==>_Main

    [/autoit]

    autoit.de/wcf/attachment/9408/

    nen Icon wollte er mir nicht hochladen...ist nicht erlaubt...

    Könnte man das schöner machen, oder besser?

    Edit: Kritik ist erwünscht, wenn es produktiv ist.... ;)