mein erstes Projekt

  • Hallo zusammen,

    ich würde gerne mein kleines Projekt verbessern bzw. effizienter gestallten
    und bitte euch hiermit um unterstützung.

    Ich sag erstmal worum es geht.

    Mit einer Installationsroutine die mit InnoSetup erstellt wurde, werden
    mehrere Dateien inkl. uninstall installiert.
    Der Installationspfad wird in eine .ini Datei ins @WindowsDir geschrieben.
    Installiert werden folgende Dateien.
    eine MS Access.mdb (für Backend + Frontend betrieb)
    eine mousehook.dll (Installpfad) (mouserad ein/aus für mdb file)
    eine pfad.ini (@WindowsDir)
    eine version.ini (installpfad)
    eine readme.txt (Installpfad)
    eine hourglass.jpg (Installpfad) für GuiCtrlCreatePic
    und natürlich eine AutoIt_Projekt.exe (Installpfad)

    1. AutoIt_Projekt.exe prüft ob DriveStatus( "S:\" ) vorhanden, ansonsten
    wird DriveMapAdd("S:"... erstellt
    2. prüft ob bestimmte Dateien im InstallPfad vorhanden sind, wenn nicht werden ALLE von LW S: kopiert.
    3. vergleicht inhalt von version.ini (local) mit version.ini (Netzwerk LW S: )
    wenn gleich wird die access.mdb gestartet, ansonsten wird von
    Netzwerk LW S: kopiert.

    ZIEL:
    Punkt 2, nur die Datei kopieren die fehlt und nicht alle
    Punkt 3, die Version (Local) sollte irgendwie aus der Windows-registrierung gelesen, bzw geschrieben werden.

    Der Installationspfad sollte ebenfalls aus der Windows-Registrierung gelesen werden.

    Puh, garnicht so einfach das zu beschreiben.
    Achso, bei der Version handelt es sich um eine Änderung in der MDB Datei,
    die der User dann per Update (filecopy) von LW S: kopiert.

    Ich habe jetzt nicht alles Haarklein beschrieben, ihr werdet bestimmt lachen wenn ihr das script seht, es ist immerhin mein erstes und alles von hier
    zusammengesucht.

    hier mal das script:

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

    #include <Process.au3>
    #include <GUIConstants.au3>

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

    If WinExists("TOP-Check-DataBase") Then
    WinActivate("TOP-Check-DataBase", "")
    Else
    $local_pfad = FileReadLine(@WindowsDir&"\Chk_DB_local.ini")
    $var = DriveStatus( "S:\" )
    if $var = "INVALID" then
    If Not IsDeclared("iMsgBoxAnswer") Then Dim $iMsgBoxAnswer
    $iMsgBoxAnswer = MsgBox(36,"Laufwerk S:","Laufwerk S: steht nicht zur Verfügung." & @CRLF & "Soll eine Verbindung zu Laufwerk S: hergestellt werden ?")
    Select
    Case $iMsgBoxAnswer = 6 ;Yes
    DriveMapAdd("S:", "\\xx.xxx.xxx.xx\top", 0, @UserName, "Name")
    Case $iMsgBoxAnswer = 7 ;No
    Exit
    EndSelect
    EndIf

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

    $notexists_files = 0

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

    if Not FileExists( $local_pfad & "\version.ini") Then
    $notexists_files = 1
    EndIf
    If Not FileExists( $local_pfad & "\Check_DataBase.mdb") Then
    $notexists_files = 1
    EndIf
    if Not FileExists( $local_pfad & "\Readme.txt") Then
    $notexists_files = 1
    EndIf
    If Not FileExists( $local_pfad & "\MouseHook.dll") Then
    $notexists_files = 1
    EndIf
    If Not FileExists( $local_pfad & "\hourglass.jpg") Then
    $notexists_files = 1
    EndIf

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

    if $notexists_files > 0 Then

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

    If Not IsDeclared("iMsgBoxAnswer") Then Dim $iMsgBoxAnswer
    $iMsgBoxAnswer = MsgBox(36,"missing File..","Es fehlen Dateien im Installationsordner." & @CRLF & "Sollen die Dateien von LW S: kopiert werden ?")
    Select
    Case $iMsgBoxAnswer = 6 ;Yes

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

    $SPLASH = GUICreate("Check-Database automation",250,140,-1,-1,1)
    GUICtrlCreateLabel("FileCopy wird durchgeführt...", 15, 40)
    GUISetState()
    GuiCtrlCreatePic($local_pfad & "\hourglass.jpg",200,35, 13,22)
    GUICtrlCreateLabel("TOP-Check-DataBase wird gestartet...", 15, 65)

    FileCopy("S:\TOP\Check_DataBase\Programme\Check_DataBase.mdb", $local_pfad & "\Check_DataBase.mdb", 1)
    FileCopy("S:\TOP\Check_DataBase\Programme\version.ini", $local_pfad & "\version.ini", 1)
    FileCopy("S:\TOP\Check_DataBase\Programme\Readme.txt", $local_pfad & "\Readme.txt", 1)
    FileCopy("S:\TOP\Check_DataBase\Programme\MouseHook.dll", $local_pfad & "\MouseHook.dll", 1)
    FileCopy("S:\TOP\Check_DataBase\Programme\hourglass.jpg", $local_pfad & "\hourglass.jpg", 1)

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

    GUICtrlCreateLabel("",200,35,13,22)
    GUICtrlCreateLabel("OK", 200, 40)
    GUICtrlSetColor(-1,0xff0000)
    GuiCtrlCreatePic($local_pfad & "\hourglass.jpg",200,60, 13,22)
    GUICtrlCreateLabel("",200,60,13,22)
    GUICtrlCreateLabel("OK", 200, 65)
    GUICtrlSetColor(-1,0xff0000)
    GUISetFont (12,400)
    GUICtrlCreateLabel("Complete", 85, 80,-1,-1,-1,-1)
    GUICtrlSetColor(-1,0xff0000)
    GUIDelete($SPLASH)
    ;Sleep(5000)
    Case $iMsgBoxAnswer = 7 ;No
    GUIDelete()
    Exit
    EndSelect
    EndIf

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

    $abf_g = FileReadLine("S:\TOP\Check_DataBase\Programme\version.ini")
    $abf_l = FileReadLine( $local_pfad & "\version.ini")

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

    if $abf_l <> $abf_g Then
    GUICreate("Update Check-DataBase", 310, 130,-1,-1,1)
    $Label = GUICtrlCreateLabel("Aktuelle Version " & $abf_g & ", Installierte Version " & $abf_l & "", 10, 10)
    $Label = GUICtrlCreateLabel("Soll das Update durchgeführt werden ?", 10, 40)
    $YesID = GUICtrlCreateButton("Yes", 90, 70, 50, 20)
    $NoID = GUICtrlCreateButton("No", 160, 70, 50, 20)
    GUISetState()
    Do
    $msg = GUIGetMsg()
    Select
    Case $msg= $YesID
    GUIDelete()
    $SPLASH = GUICreate("Check-Database automation",250,140,-1,-1,1)
    GUICtrlCreateLabel("Update wird durchgeführt...", 15, 40)
    GUISetState()
    GuiCtrlCreatePic($local_pfad & "\hourglass.jpg",200,35, 13,22)
    GUICtrlCreateLabel("TOP-Check-DataBase wird gestartet...", 15, 65)
    FileCopy("S:\TOP\Check_DataBase\Programme\Check_DataBase.mdb", $local_pfad & "\Check_DataBase.mdb", 1)
    FileCopy("S:\TOP\Check_DataBase\Programme\version.ini", $local_pfad & "\version.ini", 1)
    GUICtrlCreateLabel("",200,35,13,22)
    GUICtrlCreateLabel("OK", 200, 40)
    GUICtrlSetColor(-1,0xff0000)
    GuiCtrlCreatePic($local_pfad & "\hourglass.jpg",200,60, 13,22)
    $rc = _RunDos("start " & $local_pfad & "\Check_DataBase.mdb /prefetch:1")
    WinWait("TOP-Check-DataBase")
    GUICtrlCreateLabel("",200,60,13,22)
    GUICtrlCreateLabel("OK", 200, 65)
    GUICtrlSetColor(-1,0xff0000)
    GUISetFont (12,400)
    GUICtrlCreateLabel("Complete", 85, 80,-1,-1,-1,-1)
    GUICtrlSetColor(-1,0xff0000)
    GUIDelete($SPLASH)
    Sleep(5000)
    Case $msg= $NoID
    GUIDelete()
    Exit
    EndSelect
    Until $msg = $YesID or $msg = $NoID
    Else
    $rc = _RunDos("start " & $local_pfad & "\Check_DataBase.mdb /prefetch:1")
    WinWait("TOP-Check-DataBase")
    sleep(5000)
    EndIf
    EndIf

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


    Ich hoffe ihr blickt da durch was ich hier geschrieben habe.

    • Offizieller Beitrag

    Hi, also wie ich das so sehe bist du in der Lage aus Tipps dir selbst das wichtigste herauszuziehen - prima ;)

    Mal ein erster Tipp. Um nur die Dateien zu kopieren die fehlen, arbeite am besten mit einem Array. Als Einträge: Datei - Status. Könnte dann so aussehen:
    $arFiles[1][0] = "version.ini"
    $arFiles[1][1] = 0 ; (0 = nicht vorhanden, 1 = vorhanden)

    Dann den Status beim Abfragen setzen. Anschließend das Array durchlaufen und bei Status 0 kopieren

  • ui ui ui, da hat mich einer direkt an meinem wunden punkt erwischt "Arrays"

    mit den (sagen wir mal) normalen arrays komme ich auch nur so halbwegs klar,
    aber ich versuchs mal.

    wenn ich richtig verstanden habe setzte ich erst alle dateien in ein array

    $arFiles[1][0] = "datei1.ini"
    $arFiles[2][0] = "datei2.ini"
    $arFiles[3][0] = "datei3.ini"
    usw.

    und jetzt würde ich so weiter machen:

    if Not FileExists( $local_pfad & "\" & $arFiles[1]) Then
    $arFiles[1][0]
    else
    $arFiles[1][1]

    aber das sieht so kacke aus, das kannst du so nicht gemeint haben, da fehlt mir einfach das wissen, oder ich denke in die falsche richtung. Ich schau mich nochmal hier im board um, ich finde bestimmt etwas mit arrays womit ich was üben kann, ich muß/möchte es ja auch verstehen können was ich da mache.

    Besten dank erstmal

    PS. ich denke man kann an meinem script erkenne das ich absoluter Anfänger bin.

    • Offizieller Beitrag

    Wirf auch mal 'nen Blick in unser schönes Tutorial - Link auf der Portalseite.
    Mal der Ansatz:

    Spoiler anzeigen
    [autoit]

    ; z.B. 6 Dateien zu prüfen
    Dim $arFiles[6][2] ; vergleichbar mit einer Tabelle: 6 Zeilen, 2 Spalten
    Dim $S_Path = "S:\TOP\Check_DataBase\Programme\"

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

    ; die Dateinamen eintragen
    $arFiles[0][0] = "File 1" ; Array-Index ist Null-basiert, erstes Element = Index 0
    $arFiles[1][0] = "File 2"
    ; .... usw.

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

    ; jetzt Status auf 0 setzen für alle 6 Elemente
    For $i = 0 To 5
    $arFiles[$i][1] = 0
    Next

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

    ; hier prüfst du ob vorhanden und setzt den Status 1, falls ja
    For $i = 0 To 5
    If FileExists($local_pfad & "\" & $arFiles[$i][0]) Then $arFiles[$i][1] = 1
    Next

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

    ; wenn das OK zum Kopieren gegeben ist
    For $i = 0 To 5
    If $arFiles[$i][1] = 0 Then FileCopy($S_Path & $arFiles[$i][0], $local_pfad & "\" & $arFiles[$i][0])
    Next

    [/autoit]
  • ah, ich glaub jetzt hab ich es verstanden, eins ist mir aber immer noch unklar,

    warum muß denn der status in $arFile[$i][1] auf 0 gesetzt werden,
    welchen wert hätte denn das element wenn ich das nicht tu,
    NULL ?? oder "" ?? also leer

    das könnte dann bei der abfrage dann doch so aussehen

    If $arFiles[$i][1] <> 1 Then FileCopy($S_Pa...........

    also wenn das so wäre, hätte ich es ja verstanden, oder nicht ??


    Gruß