Install-Script-Generator

    • Offizieller Beitrag

    Hi,
    ich hatte grade das Vergnügen über 30 Dateien mit FileInstall einzubinden. Da FileInstall für die Quelldatei keine Variablen oder Macros zuläßt, ist das eine sehr müßige Handarbeit.
    Bekanntlich ist Faulheit die größte Motivation - also habe ich mir ein Script erstellt, das die lästige Schreibarbeit übernimmt.

    Die Funktion wird aufgerufen mit den Parametern:
    - Quellpfad oder ~pfade getrennt durch "|"
    - Zielpfad
    - Name der zu erstellenden Datei

    Der oder die Pfade werden rekursiv ausgelesen. Die Pfadstruktur wird für das Installationsziel mit übernommen. - Hier kann es natürlich noch zu Diskrepanzen kommen wenn die Quellpfade stark von den Zielpfaden abweichen, aber das kann man dann zügig mit 'Suchen und Ersetzen' beheben.
    Im Installationsscript enthalten ist:
    - eine Fehlerüberprüfung für jede installierte Datei
    - alle Vorgänge werden mitgelogt
    - eine Progressbar für den Installationsfortschritt wird generiert

    EDIT
    - Log + Fehlercheck und
    - Progressbar
    jetzt optional

    EDIT2
    - Bug bei Verwendung von Macros gefixt

    Da hatte ich mir doch glatt was neues 'reingefixt' :rolleyes:
    OK, nun sollte es aber stimmen.

    EDIT3
    Nun noch der letzte Schliff:
    - Es wird jetzt auch die Verzeichnisstruktur für das Installationsziel automatisch erstellt.
    (Natürlich auch in derr GUI eingebunden)

    Hinweis: Das ganze jetzt auch in einer GUI zum editieren - siehe hier

    Spoiler anzeigen
    [autoit]

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Funktion _WriteInstall($SOURCEPATHES, $TARGET, $FILENAME[, $S_BAR=-1[, $LOG=-1]])
    ;
    ; Beschreibung Erzeugt eine Installationsdatei, mit FileInstall()-Routinen
    ; für alle Dateien des bzw. der Quellpfade, Optional Install-Log und
    ; Progressbar für Installationsfortschritt
    ;
    ; Parameter $SOURCEPATHES Pfad(e) des/der Quellordner getrennt mit "|"
    ; als String - keine Macros oder Variablen
    ; $TARGET Zielordner für Installation,
    ; Macros und Variablen können verwendet werden
    ; $FILENAME Name der zu erzeugenden Datei (z.B. 'setup.au3')
    ; als String - keine Macros oder Variablen
    ; $S_BAR Statusbar generieren (-1 JA, 0 NEIN) [Optional], Default -1
    ; $LOG Logdatei und Fehlercheck (-1 JA, 0 NEIN) [Optional], Default -1
    ;
    ; Autor BugFix ( [email='bugfix@autoit.de'][/email] )
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    #include <Array.au3>
    #include <file.au3>
    Func _WriteInstall($SOURCEPATHES, $TARGET, $FILENAME, $S_BAR=-1, $LOG=-1)
    Dim $QUELLPFADE, $aFILES[1], $FH = FileOpen($FILENAME,1), $PERCENT, $DIRECTORIES
    $aFILES[0] = 0
    If ($S_BAR = -1) And ($LOG = -1) Then
    FileWrite($FH, "#include <file.au3>" & @CRLF)
    FileWrite($FH, "Dim $fehler = 0" & @CRLF)
    FileWrite($FH, 'ProgressOn("Installation", "Installationsfortschritt", "")' & @CRLF)
    ElseIf $LOG = -1 Then
    FileWrite($FH, "#include <file.au3>" & @CRLF)
    ElseIf ($S_BAR = -1) And ($LOG <> -1) Then
    FileWrite($FH, 'ProgressOn("Installation", "Installationsfortschritt", "")' & @CRLF)
    EndIf
    If StringInStr($SOURCEPATHES, "|") Then $QUELLPFADE = StringSplit($SOURCEPATHES, "|")
    If IsArray($QUELLPFADE) Then
    For $i = 1 To $QUELLPFADE[0]
    $var = _GetFileList($QUELLPFADE[$i], "*.*")
    For $k = 1 To $var[0]
    _ArrayAdd($aFILES, $var[$k])
    $aFILES[0] += 1
    Next
    Next
    Else
    $var = _GetFileList($SOURCEPATHES, "*.*")
    If Not IsArray($var) Then
    MsgBox(16, 'Achtung', 'In ' & $SOURCEPATHES & ' sind keine Dateien vorhanden!')
    Return 0
    EndIf
    For $i = 1 To $var[0]
    _ArrayAdd($aFILES, $var[$i])
    $aFILES[0] += 1
    Next
    EndIf
    Select
    Case ($S_BAR = -1) And ($LOG = -1) ; mit Statusbar und Log/Fehlercheck
    For $i = 1 To $aFILES[0]
    $PERCENT = Round(100/$aFILES[0]*$i)
    $DIERECTORIES = StringTrimLeft(StringLeft($aFILES[$i], StringInStr($aFILES[$i],"\",0,-1)-1 ), 2 )
    If StringRight($TARGET, 1) = "\" Then $TARGET = StringTrimRight($TARGET, 1)
    FileWrite($FH, 'ProgressSet(' & $PERCENT & ', "' & StringRight($aFILES[$i], StringLen($aFILES[$i])- StringInStr($aFILES[$i], "\",0,-1)) & '")' & @CRLF)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, 'If Not FileExists(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'If DirCreate(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '\ = OK")' & @CRLF)
    FileWrite($FH, @TAB & 'Else' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '\ = Fehler")' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '$fehler = 1' & @CRLF)
    FileWrite($FH, @TAB & 'EndIf' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'If FileInstall("' & $aFILES[$i] & '", ' & $TARGET & ' & ' & '"' & StringTrimLeft($aFILES[$i],2) & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = OK")' & @CRLF)
    Else
    FileWrite($FH, 'If Not FileExists("' & $TARGET & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'If DirCreate("' & $TARGET & $DIERECTORIES & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog("' & $TARGET & $DIERECTORIES & '\ = OK")' & @CRLF)
    FileWrite($FH, @TAB & 'Else' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog("' & $TARGET & $DIERECTORIES & '\ = Fehler")' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '$fehler = 1' & @CRLF)
    FileWrite($FH, @TAB & 'EndIf' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'If FileInstall("' & $aFILES[$i] & '", "' & $TARGET & StringTrimLeft($aFILES[$i],2) & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & '_FileWriteLog("' & $TARGET & '\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = OK")' & @CRLF)
    EndIf
    FileWrite($FH, 'Else' & @CRLF)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = Fehler")' & @CRLF)
    Else
    FileWrite($FH, @TAB & '_FileWriteLog("' & $TARGET & '\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = Fehler")' & @CRLF)
    EndIf
    FileWrite($FH, @TAB & '$fehler = 1' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    Next
    FileWrite($FH, 'If $fehler = 1 Then' & @CRLF)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, @TAB & 'ProgressSet( 100, "s. ' & $TARGET & ' & ' & '\Install.log", "Installation fehlerhaft!")' & @CRLF)
    Else
    FileWrite($FH, @TAB & 'ProgressSet( 100, "s. ' & $TARGET & '\Install.log", "Installation fehlerhaft!")' & @CRLF)
    EndIf
    FileWrite($FH, 'Else' & @CRLF)
    FileWrite($FH, @TAB & 'ProgressSet( 100, "Beendet", "Installation erfolgreich!")' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'Sleep(3000)' & @CRLF)
    FileWrite($FH, 'ProgressOff()' & @CRLF)
    Case ($S_BAR = -1) And ($LOG <> -1) ; mit Statusbar, ohne Log/Fehlercheck
    For $i = 1 To $aFILES[0]
    $PERCENT = Round(100/$aFILES[0]*$i)
    $DIERECTORIES = StringTrimLeft(StringLeft($aFILES[$i], StringInStr($aFILES[$i],"\",0,-1)-1 ), 2 )
    If StringRight($TARGET, 1) = "\" Then $TARGET = StringTrimRight($TARGET, 1)
    FileWrite($FH, 'ProgressSet(' & $PERCENT & ', "' & StringRight($aFILES[$i], StringLen($aFILES[$i])- StringInStr($aFILES[$i], "\",0,-1)) & '")' & @CRLF)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, 'If Not FileExists(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'DirCreate(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '")' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'FileInstall("' & $aFILES[$i] & '", ' & $TARGET & ' & ' & '"' & StringTrimLeft($aFILES[$i],2) & '")' & @CRLF)
    Else
    FileWrite($FH, 'If Not FileExists("' & $TARGET & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'DirCreate("' & $TARGET & $DIERECTORIES & '")' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'FileInstall("' & $aFILES[$i] & '", "' & $TARGET & StringTrimLeft($aFILES[$i],2) & '")' & @CRLF)
    EndIf
    Next
    FileWrite($FH, 'ProgressSet( 100, "", "Installation abgeschlossen!")' & @CRLF)
    FileWrite($FH, 'Sleep(3000)' & @CRLF)
    FileWrite($FH, 'ProgressOff()' & @CRLF)
    Case ($S_BAR <> -1) And ($LOG = -1) ; ohne Statusbar, mit Log/Fehlercheck
    For $i = 1 To $aFILES[0]
    $DIERECTORIES = StringTrimLeft(StringLeft($aFILES[$i], StringInStr($aFILES[$i],"\",0,-1)-1 ), 2 )
    If StringRight($TARGET, 1) = "\" Then $TARGET = StringTrimRight($TARGET, 1)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, 'If Not FileExists(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'If DirCreate(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '\ = OK")' & @CRLF)
    FileWrite($FH, @TAB & 'Else' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '\ = Fehler")' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '$fehler = 1' & @CRLF)
    FileWrite($FH, @TAB & 'EndIf' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'If FileInstall("' & $aFILES[$i] & '", ' & $TARGET & ' & ' & '"' & StringTrimLeft($aFILES[$i],2) & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = OK")' & @CRLF)
    Else
    FileWrite($FH, 'If Not FileExists("' & $TARGET & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'If DirCreate("' & $TARGET & $DIERECTORIES & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog("' & $TARGET & $DIERECTORIES & '\ = OK")' & @CRLF)
    FileWrite($FH, @TAB & 'Else' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog("' & $TARGET & $DIERECTORIES & '\ = Fehler")' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '$fehler = 1' & @CRLF)
    FileWrite($FH, @TAB & 'EndIf' & @CRLF)
    FileWrite($FH, 'If FileInstall("' & $aFILES[$i] & '", "' & $TARGET & StringTrimLeft($aFILES[$i],2) & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & '_FileWriteLog("' & $TARGET & '\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = OK")' & @CRLF)
    EndIf
    FileWrite($FH, 'Else' & @CRLF)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = Fehler")' & @CRLF)
    Else
    FileWrite($FH, @TAB & '_FileWriteLog("' & $TARGET & '\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = Fehler")' & @CRLF)
    EndIf
    FileWrite($FH, @TAB & '$fehler = 1' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    Next
    Case ($S_BAR <> -1) And ($LOG <> -1) ; ohne Statusbar, ohne Log/Fehlercheck
    For $i = 1 To $aFILES[0]
    $DIERECTORIES = StringTrimLeft(StringLeft($aFILES[$i], StringInStr($aFILES[$i],"\",0,-1)-1 ), 2 )
    If StringRight($TARGET, 1) = "\" Then $TARGET = StringTrimRight($TARGET, 1)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, 'If Not FileExists(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'DirCreate(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '")' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'FileInstall("' & $aFILES[$i] & '", ' & $TARGET & ' & ' & '"' & StringTrimLeft($aFILES[$i],2) & '")' & @CRLF)
    Else
    FileWrite($FH, 'If Not FileExists("' & $TARGET & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'DirCreate("' & $TARGET & $DIERECTORIES & '")' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'FileInstall("' & $aFILES[$i] & '", "' & $TARGET & StringTrimLeft($aFILES[$i],2) & '")' & @CRLF)
    EndIf
    Next
    EndSelect
    FileClose($FH)
    EndFunc ;==>_WriteInstall

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

    ;********************************************************************************
    ; AutoIt Version: 3.0
    ; Language: English
    ; Platform: Win9x/NT/XP
    ; Author: jos van der Zande
    ;
    ; Find files in directory and subdirectories and return it in an Array, all coded in Autoit3
    ;
    ; _GetFileList($DIR, $FILEMASK, 1) ; _GetFileList($DIR, $FILEMASK [, Flag]) Flag GetFile(Default) = 0 , GetDirOnly = 1
    ;********************************************************************************
    ;Recursive search for filemask
    ;********************************************************************************

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

    Func _GetFileList($T_DIR,$T_MASK,$DIR_ONLY=0)
    Dim $N_DIRNAMES[200000] ; max number of directories that can be scanned
    Local $N_DIRCOUNT = 0
    Local $N_FILE
    Local $N_SEARCH
    Local $N_TFILE
    Local $N_OFILE
    Local $T_FILENAMES
    Local $T_FILECOUNT
    Local $T_DIRCOUNT = 1
    Local $FILEMASK
    ; check Filemask \ for empty File-Array by GetDirOnly
    If $FILEMASK = "n" Then $FILEMASK = "*.no"
    ; remove the end \ If specified
    If StringRight($T_DIR,1) = "\" Then $T_DIR = StringTrimRight($T_DIR,1)
    $N_DIRNAMES[$T_DIRCOUNT] = $T_DIR
    ; Exit if base dir doesn't exists
    If Not FileExists($T_DIR) Then Return 0
    ; keep on looping until all directories are scanned
    While $T_DIRCOUNT > $N_DIRCOUNT
    $N_DIRCOUNT = $N_DIRCOUNT + 1
    ; find all subdirs in this directory and save them in a array
    $N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\*.*")
    While 1
    $N_FILE = FileFindNextFile($N_SEARCH)
    If @error Then ExitLoop
    ; skip these references
    If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
    $N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
    ; if Directory than add to the list of directories to be processed
    If StringInStr(FileGetAttrib( $N_TFILE ),"D") > 0 Then
    $T_DIRCOUNT = $T_DIRCOUNT + 1
    $N_DIRNAMES[$T_DIRCOUNT] = $N_TFILE
    EndIf
    Wend
    FileClose($N_SEARCH) ; find all Files that mtach the MASK
    $N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\" & $T_MASK )
    If $N_SEARCH = -1 Then ContinueLoop
    While 1
    $N_FILE = FileFindNextFile($N_SEARCH)
    If @error Then ExitLoop
    ; skip these references
    If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
    $N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
    ; if Directory than add to the list of directories to be processed
    If StringInStr(FileGetAttrib( $N_TFILE ),"D") = 0 Then
    $T_FILENAMES = $T_FILENAMES & $N_TFILE & @CR
    $T_FILECOUNT = $T_FILECOUNT + 1
    ;MsgBox(0,'filecount ' & $T_FILECOUNT ,$N_TFILE)
    EndIf
    Wend
    FileClose($N_SEARCH)
    Wend
    If $DIR_ONLY = 0 Then
    $T_FILENAMES = StringTrimRight($T_FILENAMES,1)
    $N_OFILE = StringSplit($T_FILENAMES,@CR)
    Return( $N_OFILE )
    Else
    ReDim $N_DIRNAMES[$N_DIRCOUNT+1]
    $N_DIRNAMES[0] = $N_DIRCOUNT
    Return $N_DIRNAMES
    EndIf
    EndFunc ;==>_GetFileList

    [/autoit]
    • Offizieller Beitrag
    Zitat

    frage mich bloss ob Autoit das richtige Install Tool ist.


    Sicher gibt es andere, bessere Tools dafür. Aber das ist ja nun mal der Reiz dabei, soviel wie möglich mit AutoIt zu realisieren. Nennen wir es sportlichen Ehrgeiz. ;)

    Hab die Funktion inzwischen noch etwas modifiziert, Statusbar und Log/Fehlercheck als Optionen.
    Änderungen im ersten Thread.

  • Hi,

    eine gute Idee:-)

    Ich habe es bei mir getestet, leider ohne Erfolg "Installation Fehlerhaft". Ich habe bestimmt einen Fehler beim Aufruf der Funktion:
    _WriteInstall("G:\Apps\TUGZip", "C:\TEMP\Test", "C:\TEMP\setup.au3",-1,-1)

    Die Quelle ist vorhanden, den Zielordner habe ich vorher manuell angelegt. Das Setup-Script erzeugt im Zielordner, wie gewünscht, eine Datei Install.log mit folgendem Inhalt:
    2007-03-25 12:55:30 : \Apps\TUGZip\Forum.url = Fehler
    2007-03-25 12:55:30 : \Apps\TUGZip\Help.chm = Fehler
    usw.

    Viele Grüße,
    Milko

    • Offizieller Beitrag

    Wie im letzen Edit bei Post 1 angekündigt, hier eine GUI in der das Ganze komfortabel ausgewählt und nachbearbeitet werden kann ( z.B. einzelne Dateien entfernen ).

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <Array.au3>
    #include <file.au3>
    #include <string.au3>
    Opt("GUIOnEventMode", 1)
    Dim $aRadio[7], $FileOut, $source, $target, $var, $editStr = "", $fhTmp, $fhOut, $sizeRaw
    Dim $gesFiles = 0 ; Anzahl Dateien gesamt im Installscript
    Dim $count = 0 ; Zähler Durchläufe
    Dim $progressNew = 0 ; Progressschritte neu berechnen wenn > 0
    Dim $aTmpCode ; Code temporär einlesen
    Dim $tmpFile1 = @ScriptDir & "\TmpInstallAU3.txt"
    Dim $tmpFile2 = @ScriptDir & "\TmpInstallAU3.au3"

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

    $GUI = GUICreate("Installationsscript generieren", 695, 646, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "GUIClose")
    $grOpt = GUICtrlCreateGroup("Optionen im Installscript", 11, 10, 672, 50)
    $chStatus = GUICtrlCreateCheckbox("Statusbar", 104, 30, 97, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $chLog = GUICtrlCreateCheckbox("Logdatei + Fehlerbehandlung", 330, 30, 164, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $grSource = GUICtrlCreateGroup("Quellpfad mit Installationsdateien", 11, 70, 672, 50)
    $iPath = GUICtrlCreateInput("", 104, 87, 383, 21)
    $bPath = GUICtrlCreateButton("Auswählen", 522, 87, 85, 21, 0)
    GUICtrlSetOnEvent(-1, "bPathClick")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $grTarget = GUICtrlCreateGroup("Installationsziel", 11, 130, 672, 97)
    $aRadio[0] = GUICtrlCreateRadio("@DesktopDir", 38, 148, 89, 17)
    GUICtrlSetOnEvent(-1, "rDesktopClick")
    $aRadio[1] = GUICtrlCreateRadio("@MyDocumentsDir", 38, 172, 113, 17)
    GUICtrlSetOnEvent(-1, "rMyDocClick")
    $aRadio[2] = GUICtrlCreateRadio("@HomeDrive", 38, 196, 113, 17)
    GUICtrlSetOnEvent(-1, "rHomeDriveClick")
    $aRadio[3] = GUICtrlCreateRadio("@ProgramsDir", 235, 148, 113, 17)
    GUICtrlSetOnEvent(-1, "rProgDirClick")
    $aRadio[4] = GUICtrlCreateRadio("@ProgramFilesDir", 235, 172, 113, 17)
    GUICtrlSetOnEvent(-1, "rProgFileDirClick")
    $aRadio[5] = GUICtrlCreateRadio("@SystemDir", 431, 148, 113, 16)
    GUICtrlSetOnEvent(-1, "rSysDirClick")
    $aRadio[6] = GUICtrlCreateRadio("@WindowsDir", 431, 172, 113, 17)
    GUICtrlSetOnEvent(-1, "rWinDirClick")
    $iTarget = GUICtrlCreateInput("", 235, 194, 428, 21)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $bFileOut = GUICtrlCreateButton("Ausgabedatei", 11, 239, 84, 21, 0)
    GUICtrlSetOnEvent(-1, "bFileOutClick")
    $iFileOut = GUICtrlCreateInput("", 104, 239, 383, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
    $bGenerieren = GUICtrlCreateButton("Generiere Code", 522, 239, 160, 21, 0)
    GUICtrlSetOnEvent(-1, "bGenerierenClick")
    $grCode = GUICtrlCreateGroup("Code (editieren)", 11, 272, 672, 309)
    $eCode = GUICtrlCreateEdit("", 19, 291, 655, 275)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $bOKnext = GUICtrlCreateButton("Übernehmen", 573, 602, 110, 25, 0)
    GUICtrlSetOnEvent(-1, "bOKnextClick")
    $eInfo = GUICtrlCreateEdit("", 19, 588, 540, 51, $ES_READONLY)
    GUICtrlSetData(-1, _
    "Der aktuell generierte Code wird in eine temporäre Datei übernommen. Nach Übernahme können Dateien aus " & _
    "neuem Quellpfad zugefügt werden. Beim Schließen der GUI werden alle Daten in die Ausgabedatei geschrieben. " & _
    "Wenn nötig, werden Kopf- und Fußbereich zugefügt und die Progressschritte neu berechnet.")
    GUICtrlSetState($bPath, $GUI_FOCUS)
    GUISetState(@SW_SHOW)
    _CodeDisable()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _RadioUncheck()
    For $i = 0 To UBound($aRadio)-1
    GUICtrlSetState($aRadio[$i], $GUI_UNCHECKED)
    Next
    EndFunc

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

    Func _SourceTargetDisable()
    GUICtrlSetState($grSource, $GUI_DISABLE)
    GUICtrlSetState($iPath, $GUI_DISABLE)
    GUICtrlSetState($bPath, $GUI_DISABLE)
    GUICtrlSetState($grTarget, $GUI_DISABLE)
    GUICtrlSetState($iTarget, $GUI_DISABLE)
    For $i = 0 To UBound($aRadio)-1
    GUICtrlSetState($aRadio[$i], $GUI_DISABLE)
    Next
    EndFunc

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

    Func _SourceTargetEnable()
    GUICtrlSetState($grSource, $GUI_ENABLE)
    GUICtrlSetState($iPath, $GUI_ENABLE)
    GUICtrlSetState($bPath, $GUI_ENABLE)
    GUICtrlSetState($grTarget, $GUI_ENABLE)
    GUICtrlSetState($iTarget, $GUI_ENABLE)
    For $i = 0 To UBound($aRadio)-1
    GUICtrlSetState($aRadio[$i], $GUI_ENABLE)
    Next
    EndFunc

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

    Func _OptDisable()
    GUICtrlSetState($grOpt, $GUI_DISABLE)
    GUICtrlSetState($chStatus, $GUI_DISABLE)
    GUICtrlSetState($chLog, $GUI_DISABLE)
    EndFunc

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

    Func _CodeDisable()
    GUICtrlSetState($grCode, $GUI_DISABLE)
    GUICtrlSetState($eCode, $GUI_DISABLE)
    GUICtrlSetState($bOKnext, $GUI_DISABLE)
    EndFunc

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

    Func _CodeEnable()
    GUICtrlSetState($grCode, $GUI_ENABLE)
    GUICtrlSetState($eCode, $GUI_ENABLE)
    GUICtrlSetState($bOKnext, $GUI_ENABLE)
    EndFunc

    Func bFileOutClick()
    $FileOut = FileOpenDialog("Ausgabedatei festlegen.", @MyDocumentsDir & "\", "AutoIt Datei (*.au3)", 8, "Install.au3")
    If @error Then
    MsgBox(16,"","Keine Datei gewählt.")
    Return
    Else
    GUICtrlSetData($iFileOut, $FileOut)
    EndIf
    EndFunc

    Func bGenerierenClick()
    $source = GUICtrlRead($iPath)
    $target = GUICtrlRead($iTarget)
    If ($source <> "") And ($target <> "") And ($FileOut <> "") Then
    _OptDisable()
    _SourceTargetDisable()
    _CodeEnable()
    GUICtrlSetState($bFileOut, $GUI_DISABLE)
    GUICtrlSetState($bGenerieren, $GUI_DISABLE)
    $count += 1
    If $count > 1 And GUICtrlRead($chStatus) = $GUI_CHECKED Then $progressNew = 1
    Select
    Case GUICtrlRead($chStatus) = $GUI_CHECKED And GUICtrlRead($chLog) = $GUI_CHECKED ; m. Statusbar, m. Log/Fehle
    _WriteInstall($source, $target, $tmpFile1)
    Case GUICtrlRead($chStatus) = $GUI_CHECKED And GUICtrlRead($chLog) = $GUI_UNCHECKED ; m. Statusbar, o. Log/Fehler
    _WriteInstall($source, $target, $tmpFile1, -1, 0)
    Case GUICtrlRead($chStatus) = $GUI_UNCHECKED And GUICtrlRead($chLog) = $GUI_CHECKED ; o. Statusbar, m. Log/Fehler
    _WriteInstall($source, $target, $tmpFile1, 0)
    Case GUICtrlRead($chStatus) = $GUI_UNCHECKED And GUICtrlRead($chLog) = $GUI_UNCHECKED ; o. Statusbar, o. Log/Fehler
    _WriteInstall($source, $target, $tmpFile1, 0, 0)
    EndSelect
    If Not _FileReadToArray($tmpFile1, $aTmpCode) Then ; in Array einlesen
    MsgBox(16, 'ACHTUNG!', "Datei: '" & $tmpFile1 &"' nicht vorhanden oder leer!")
    Return
    EndIf
    $sizeRaw = FileGetSize($tmpFile1)
    FileDelete($tmpFile1)
    For $i = 1 To $aTmpCode[0] ; String für Edit erzeugen
    If $i = 1 Then
    $editStr = $aTmpCode[$i]
    Else
    $editStr &= @CRLF & $aTmpCode[$i]
    EndIf
    Next
    GUICtrlSetData($eCode, $editStr)
    $editStr = GUICtrlRead($eCode)
    $editStr = StringSplit($editStr, @LF)
    $fhTmp = FileOpen($tmpFile2, 1)
    For $i = 1 To $editStr[0]
    FileWriteLine($fhTmp, $editStr[$i] & @CRLF)
    Next
    FileClose($fhTmp)
    Else
    If $source = "" Then
    MsgBox(16,"ACHTUNG!", "Kein Quell-Pfad mit Installationsdateien ausgewählt!")
    ElseIf $target = "" Then
    MsgBox(16,"ACHTUNG!", "Kein Ziel-Pfad für Installationsdateien ausgewählt!")
    Else
    MsgBox(16,"ACHTUNG!", "Keine Ausgabedatei festgelegt!")
    EndIf
    EndIf
    EndFunc

    Func bOKnextClick()
    If FileGetSize($tmpFile2) <> $sizeRaw Then $progressNew = 1 ; Datei wurde editiert
    GUICtrlSetData($eCode, "")
    _SourceTargetEnable()
    _RadioUncheck()
    _CodeDisable()
    GUICtrlSetData($iPath, "")
    GUICtrlSetData($iTarget, "")
    GUICtrlSetState($bGenerieren, $GUI_ENABLE)
    EndFunc

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


    Func bPathClick()
    $var = FileSelectFolder("Ordner mit zu installierenden Dateien:","", 2+4)
    If @error Then
    If GUICtrlRead($iPath) = "" Then MsgBox(16,"ACHTUNG!", "Kein Ordner gewählt!")
    Return
    Else
    GUICtrlSetData($iPath, $var)
    EndIf
    EndFunc

    Func GUIClose()
    Local $percent, $aTmp
    If $count = 0 Then Exit
    _FileReadToArray($tmpFile2, $aTmp)
    FileDelete($tmpFile2)
    $fhOut = FileOpen($FileOut, 1)
    If $progressNew = 1 Then ; Progresschritte neu berechnen
    For $i = 1 To $aTmp[0]
    If StringInStr($aTmp[$i], 'ProgressSet') Then
    $gesFiles += 1
    EndIf
    Next
    $k = 0
    For $i = 1 To $aTmp[0]
    If StringInStr($aTmp[$i], 'ProgressSet') Then
    $k += 1
    $percent = Round(100/$gesFiles*$k)
    $var = _StringBetween($aTmp[$i], "(", "," )
    $aTmp[$i] = StringReplace($aTmp[$i], $var[0], $percent)
    EndIf
    Next
    EndIf
    Select
    Case GUICtrlRead($chStatus) = $GUI_CHECKED And GUICtrlRead($chLog) = $GUI_CHECKED
    FileWrite($fhOut, "#include <file.au3>" & @CRLF)
    FileWrite($fhOut, "Dim $fehler = 0" & @CRLF)
    FileWrite($fhOut, 'ProgressOn("Installation", "Installationsfortschritt", "")' & @CRLF)
    Case GUICtrlRead($chLog) = $GUI_CHECKED
    FileWrite($fhOut, "#include <file.au3>" & @CRLF)
    Case GUICtrlRead($chStatus) = $GUI_CHECKED And GUICtrlRead($chLog) = $GUI_UNCHECKED
    FileWrite($fhOut, 'ProgressOn("Installation", "Installationsfortschritt", "")' & @CRLF)
    EndSelect
    For $i = 1 To $aTmp[0]
    If $aTmp[$i] <> "" Then FileWrite($fhOut, $aTmp[$i] & @CRLF) ; aus Tmp2 in Ausgabedatei schreiben
    Next
    Select ; Fußbereich zufügen
    Case GUICtrlRead($chStatus) = $GUI_CHECKED And GUICtrlRead($chLog) = $GUI_CHECKED ; Statusbar m. Log/Fehler
    FileWrite($fhOut, 'If $fehler = 1 Then' & @CRLF)
    FileWrite($fhOut, @TAB & 'ProgressSet( 100, "s. ' & $TARGET & ' & ' & '\Install.log", "Installation fehlerhaft!")' & @CRLF)
    FileWrite($fhOut, 'Else' & @CRLF)
    FileWrite($fhOut, @TAB & 'ProgressSet( 100, "Beendet", "Installation erfolgreich!")' & @CRLF)
    FileWrite($fhOut, 'EndIf' & @CRLF)
    FileWrite($fhOut, 'Sleep(3000)' & @CRLF)
    FileWrite($fhOut, 'ProgressOff()' & @CRLF)
    Case GUICtrlRead($chStatus) = $GUI_CHECKED And GUICtrlRead($chLog) = $GUI_UNCHECKED ; Statusbar o. Log/Fehler
    FileWrite($fhOut, 'ProgressSet( 100, "", "Installation abgeschlossen!")' & @CRLF)
    FileWrite($fhOut, 'Sleep(3000)' & @CRLF)
    FileWrite($fhOut, 'ProgressOff()' & @CRLF)
    EndSelect
    FileClose($fhOut)
    MsgBox(64, "Script Generator", "Ausgabedatei" & @LF & @LF & $FileOut & @LF & @LF & "erstellt." )
    Exit
    EndFunc

    Func rDesktopClick()
    GUICtrlSetData($iTarget, "@DesktopDir")
    EndFunc

    Func rHomeDriveClick()
    GUICtrlSetData($iTarget, "@HomeDrive")
    EndFunc

    Func rMyDocClick()
    GUICtrlSetData($iTarget, "@MyDocumentsDir")
    EndFunc

    Func rProgDirClick()
    GUICtrlSetData($iTarget, "@ProgramsDir")
    EndFunc

    Func rProgFileDirClick()
    GUICtrlSetData($iTarget, "@ProgramFilesDir")
    EndFunc

    Func rSysDirClick()
    GUICtrlSetData($iTarget, "@SystemDir")
    EndFunc

    Func rWinDirClick()
    GUICtrlSetData($iTarget, "@WindowsDir")
    EndFunc

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

    ; DIE FOLGENDE FUNKTION WURDE FÜR DIESEN EINSATZ ETWAS VERÄNDERT. IM ORIGINAL SIND
    ; DIE HIER AUSKOMMENTIERTEN BEREICHE FREI.
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Funktion _WriteInstall($SOURCEPATHES, $TARGET, $FILENAME[, $S_BAR=-1[, $LOG=-1]])
    ;
    ; Beschreibung Erzeugt eine Installationsdatei, mit FileInstall()-Routinen
    ; für alle Dateien des bzw. der Quellpfade, Optional Install-Log und
    ; Progressbar für Installationsfortschritt
    ;
    ; Parameter $SOURCEPATHES Pfad(e) des/der Quellordner getrennt mit "|"
    ; als String - keine Macros oder Variablen
    ; $TARGET Zielordner für Installation,
    ; Macros und Variablen können verwendet werden
    ; $FILENAME Name der zu erzeugenden Datei (z.B. 'setup.au3')
    ; als String - keine Macros oder Variablen
    ; $S_BAR Statusbar generieren (-1 JA, 0 NEIN) [Optional], Default -1
    ; $LOG Logdatei und Fehlercheck (-1 JA, 0 NEIN) [Optional], Default -1
    ;
    ; Autor BugFix ( [email='bugfix@autoit.de'][/email] )
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Func _WriteInstall($SOURCEPATHES, $TARGET, $FILENAME, $S_BAR=-1, $LOG=-1)
    Dim $QUELLPFADE, $aFILES[1], $FH = FileOpen($FILENAME,1), $PERCENT
    $aFILES[0] = 0
    #cs
    If ($S_BAR = -1) And ($LOG = -1) Then
    FileWrite($FH, "#include <file.au3>" & @CRLF)
    FileWrite($FH, "Dim $fehler = 0" & @CRLF)
    FileWrite($FH, 'ProgressOn("Installation", "Installationsfortschritt", "")' & @CRLF)
    ElseIf $LOG = -1 Then
    FileWrite($FH, "#include <file.au3>" & @CRLF)
    ElseIf ($S_BAR = -1) And ($LOG <> -1) Then
    FileWrite($FH, 'ProgressOn("Installation", "Installationsfortschritt", "")' & @CRLF)
    EndIf
    #ce
    If StringInStr($SOURCEPATHES, "|") Then $QUELLPFADE = StringSplit($SOURCEPATHES, "|")
    If IsArray($QUELLPFADE) Then
    For $i = 1 To $QUELLPFADE[0]
    $var = _GetFileList($QUELLPFADE[$i], "*.*")
    For $k = 1 To $var[0]
    _ArrayAdd($aFILES, $var[$k])
    $aFILES[0] += 1
    Next
    Next
    Else
    $var = _GetFileList($SOURCEPATHES, "*.*")
    If Not IsArray($var) Then
    MsgBox(16, 'Achtung', 'In ' & $SOURCEPATHES & ' sind keine Dateien vorhanden!')
    Return 0
    EndIf
    For $i = 1 To $var[0]
    _ArrayAdd($aFILES, $var[$i])
    $aFILES[0] += 1
    Next
    EndIf
    Select
    Case ($S_BAR = -1) And ($LOG = -1) ; mit Statusbar und Log/Fehlercheck
    For $i = 1 To $aFILES[0]
    $PERCENT = Round(100/$aFILES[0]*$i)
    $DIERECTORIES = StringTrimLeft(StringLeft($aFILES[$i], StringInStr($aFILES[$i],"\",0,-1)-1 ), 2 )
    If StringRight($TARGET, 1) = "\" Then $TARGET = StringTrimRight($TARGET, 1)
    FileWrite($FH, 'ProgressSet(' & $PERCENT & ', "' & StringRight($aFILES[$i], StringLen($aFILES[$i])- StringInStr($aFILES[$i], "\",0,-1)) & '")' & @CRLF)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, 'If Not FileExists(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'If DirCreate(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '\ = OK")' & @CRLF)
    FileWrite($FH, @TAB & 'Else' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '\ = Fehler")' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '$fehler = 1' & @CRLF)
    FileWrite($FH, @TAB & 'EndIf' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'If FileInstall("' & $aFILES[$i] & '", ' & $TARGET & ' & ' & '"' & StringTrimLeft($aFILES[$i],2) & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = OK")' & @CRLF)
    Else
    FileWrite($FH, 'If Not FileExists("' & $TARGET & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'If DirCreate("' & $TARGET & $DIERECTORIES & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog("' & $TARGET & $DIERECTORIES & '\ = OK")' & @CRLF)
    FileWrite($FH, @TAB & 'Else' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog("' & $TARGET & $DIERECTORIES & '\ = Fehler")' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '$fehler = 1' & @CRLF)
    FileWrite($FH, @TAB & 'EndIf' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'If FileInstall("' & $aFILES[$i] & '", "' & $TARGET & StringTrimLeft($aFILES[$i],2) & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & '_FileWriteLog("' & $TARGET & '\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = OK")' & @CRLF)
    EndIf
    FileWrite($FH, 'Else' & @CRLF)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = Fehler")' & @CRLF)
    Else
    FileWrite($FH, @TAB & '_FileWriteLog("' & $TARGET & '\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = Fehler")' & @CRLF)
    EndIf
    FileWrite($FH, @TAB & '$fehler = 1' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    Next
    #cs
    FileWrite($FH, 'If $fehler = 1 Then' & @CRLF)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, @TAB & 'ProgressSet( 100, "s. ' & $TARGET & ' & ' & '\Install.log", "Installation fehlerhaft!")' & @CRLF)
    Else
    FileWrite($FH, @TAB & 'ProgressSet( 100, "s. ' & $TARGET & '\Install.log", "Installation fehlerhaft!")' & @CRLF)
    EndIf
    FileWrite($FH, 'Else' & @CRLF)
    FileWrite($FH, @TAB & 'ProgressSet( 100, "Beendet", "Installation erfolgreich!")' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'Sleep(3000)' & @CRLF)
    FileWrite($FH, 'ProgressOff()' & @CRLF)
    #ce
    Case ($S_BAR = -1) And ($LOG <> -1) ; mit Statusbar, ohne Log/Fehlercheck
    For $i = 1 To $aFILES[0]
    $PERCENT = Round(100/$aFILES[0]*$i)
    $DIERECTORIES = StringTrimLeft(StringLeft($aFILES[$i], StringInStr($aFILES[$i],"\",0,-1)-1 ), 2 )
    If StringRight($TARGET, 1) = "\" Then $TARGET = StringTrimRight($TARGET, 1)
    FileWrite($FH, 'ProgressSet(' & $PERCENT & ', "' & StringRight($aFILES[$i], StringLen($aFILES[$i])- StringInStr($aFILES[$i], "\",0,-1)) & '")' & @CRLF)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, 'If Not FileExists(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'DirCreate(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '")' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'FileInstall("' & $aFILES[$i] & '", ' & $TARGET & ' & ' & '"' & StringTrimLeft($aFILES[$i],2) & '")' & @CRLF)
    Else
    FileWrite($FH, 'If Not FileExists("' & $TARGET & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'DirCreate("' & $TARGET & $DIERECTORIES & '")' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'FileInstall("' & $aFILES[$i] & '", "' & $TARGET & StringTrimLeft($aFILES[$i],2) & '")' & @CRLF)
    EndIf
    Next
    #cs
    FileWrite($FH, 'ProgressSet( 100, "", "Installation abgeschlossen!")' & @CRLF)
    FileWrite($FH, 'Sleep(3000)' & @CRLF)
    FileWrite($FH, 'ProgressOff()' & @CRLF)
    #ce
    Case ($S_BAR <> -1) And ($LOG = -1) ; ohne Statusbar, mit Log/Fehlercheck
    For $i = 1 To $aFILES[0]
    $DIERECTORIES = StringTrimLeft(StringLeft($aFILES[$i], StringInStr($aFILES[$i],"\",0,-1)-1 ), 2 )
    If StringRight($TARGET, 1) = "\" Then $TARGET = StringTrimRight($TARGET, 1)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, 'If Not FileExists(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'If DirCreate(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '\ = OK")' & @CRLF)
    FileWrite($FH, @TAB & 'Else' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '\ = Fehler")' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '$fehler = 1' & @CRLF)
    FileWrite($FH, @TAB & 'EndIf' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'If FileInstall("' & $aFILES[$i] & '", ' & $TARGET & ' & ' & '"' & StringTrimLeft($aFILES[$i],2) & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = OK")' & @CRLF)
    Else
    FileWrite($FH, 'If Not FileExists("' & $TARGET & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'If DirCreate("' & $TARGET & $DIERECTORIES & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog("' & $TARGET & $DIERECTORIES & '\ = OK")' & @CRLF)
    FileWrite($FH, @TAB & 'Else' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '_FileWriteLog("' & $TARGET & $DIERECTORIES & '\ = Fehler")' & @CRLF)
    FileWrite($FH, @TAB & @TAB & '$fehler = 1' & @CRLF)
    FileWrite($FH, @TAB & 'EndIf' & @CRLF)
    FileWrite($FH, 'If FileInstall("' & $aFILES[$i] & '", "' & $TARGET & StringTrimLeft($aFILES[$i],2) & '") = 1 Then' & @CRLF)
    FileWrite($FH, @TAB & '_FileWriteLog("' & $TARGET & '\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = OK")' & @CRLF)
    EndIf
    FileWrite($FH, 'Else' & @CRLF)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, @TAB & '_FileWriteLog(' & $TARGET & ' & ' & '"\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = Fehler")' & @CRLF)
    Else
    FileWrite($FH, @TAB & '_FileWriteLog("' & $TARGET & '\Install.log", "' & StringTrimLeft($aFILES[$i],2) & ' = Fehler")' & @CRLF)
    EndIf
    FileWrite($FH, @TAB & '$fehler = 1' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    Next
    Case ($S_BAR <> -1) And ($LOG <> -1) ; ohne Statusbar, ohne Log/Fehlercheck
    For $i = 1 To $aFILES[0]
    $DIERECTORIES = StringTrimLeft(StringLeft($aFILES[$i], StringInStr($aFILES[$i],"\",0,-1)-1 ), 2 )
    If StringRight($TARGET, 1) = "\" Then $TARGET = StringTrimRight($TARGET, 1)
    If StringInStr($TARGET, "@") Then
    FileWrite($FH, 'If Not FileExists(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'DirCreate(' & $TARGET & ' & ' & '"' & $DIERECTORIES & '")' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'FileInstall("' & $aFILES[$i] & '", ' & $TARGET & ' & ' & '"' & StringTrimLeft($aFILES[$i],2) & '")' & @CRLF)
    Else
    FileWrite($FH, 'If Not FileExists("' & $TARGET & $DIERECTORIES & '") Then' & @CRLF)
    FileWrite($FH, @TAB & 'DirCreate("' & $TARGET & $DIERECTORIES & '")' & @CRLF)
    FileWrite($FH, 'EndIf' & @CRLF)
    FileWrite($FH, 'FileInstall("' & $aFILES[$i] & '", "' & $TARGET & StringTrimLeft($aFILES[$i],2) & '")' & @CRLF)
    EndIf
    Next
    EndSelect
    FileClose($FH)
    EndFunc ;==>_WriteInstall

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

    ;********************************************************************************
    ; AutoIt Version: 3.0
    ; Language: English
    ; Platform: Win9x/NT/XP
    ; Author: jos van der Zande
    ;
    ; Find files in directory and subdirectories and return it in an Array, all coded in Autoit3
    ;
    ; _GetFileList($DIR, $FILEMASK, 1) ; _GetFileList($DIR, $FILEMASK [, Flag]) Flag GetFile(Default) = 0 , GetDirOnly = 1
    ;********************************************************************************
    ;Recursive search for filemask
    ;********************************************************************************

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

    Func _GetFileList($T_DIR,$T_MASK,$DIR_ONLY=0)
    Dim $N_DIRNAMES[200000] ; max number of directories that can be scanned
    Local $N_DIRCOUNT = 0
    Local $N_FILE
    Local $N_SEARCH
    Local $N_TFILE
    Local $N_OFILE
    Local $T_FILENAMES
    Local $T_FILECOUNT
    Local $T_DIRCOUNT = 1
    Local $FILEMASK
    ; check Filemask \ for empty File-Array by GetDirOnly
    If $FILEMASK = "n" Then $FILEMASK = "*.no"
    ; remove the end \ If specified
    If StringRight($T_DIR,1) = "\" Then $T_DIR = StringTrimRight($T_DIR,1)
    $N_DIRNAMES[$T_DIRCOUNT] = $T_DIR
    ; Exit if base dir doesn't exists
    If Not FileExists($T_DIR) Then Return 0
    ; keep on looping until all directories are scanned
    While $T_DIRCOUNT > $N_DIRCOUNT
    $N_DIRCOUNT = $N_DIRCOUNT + 1
    ; find all subdirs in this directory and save them in a array
    $N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\*.*")
    While 1
    $N_FILE = FileFindNextFile($N_SEARCH)
    If @error Then ExitLoop
    ; skip these references
    If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
    $N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
    ; if Directory than add to the list of directories to be processed
    If StringInStr(FileGetAttrib( $N_TFILE ),"D") > 0 Then
    $T_DIRCOUNT = $T_DIRCOUNT + 1
    $N_DIRNAMES[$T_DIRCOUNT] = $N_TFILE
    EndIf
    Wend
    FileClose($N_SEARCH) ; find all Files that mtach the MASK
    $N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\" & $T_MASK )
    If $N_SEARCH = -1 Then ContinueLoop
    While 1
    $N_FILE = FileFindNextFile($N_SEARCH)
    If @error Then ExitLoop
    ; skip these references
    If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
    $N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
    ; if Directory than add to the list of directories to be processed
    If StringInStr(FileGetAttrib( $N_TFILE ),"D") = 0 Then
    $T_FILENAMES = $T_FILENAMES & $N_TFILE & @CR
    $T_FILECOUNT = $T_FILECOUNT + 1
    ;MsgBox(0,'filecount ' & $T_FILECOUNT ,$N_TFILE)
    EndIf
    Wend
    FileClose($N_SEARCH)
    Wend
    If $DIR_ONLY = 0 Then
    $T_FILENAMES = StringTrimRight($T_FILENAMES,1)
    $N_OFILE = StringSplit($T_FILENAMES,@CR)
    Return( $N_OFILE )
    Else
    ReDim $N_DIRNAMES[$N_DIRCOUNT+1]
    $N_DIRNAMES[0] = $N_DIRCOUNT
    Return $N_DIRNAMES
    EndIf
    EndFunc ;==>_GetFileList

    [/autoit]

    milko
    Ja, das Script hat korrekt gearbeitet.
    Ist mir auch erst etwas später klar geworden - 'FileInstall( )' kann nur auf bereits existierende Ordner angewendet werden.
    Daher jetzt hier die Möglichkeit zum Nacheditieren in der GUI.

    Oops, lese jetzt grad, dass du die Zielverzeichnisse per Hand erstellt hattest.
    Hab ich jetzt keine Erklärung dafür. Meine Testinstallationen sind gelaufen. ?(

    Das steht als nächstes auf meiner ToDoList - die Zielverzeichnisstruktur automatisch erstellen.

    EDIT
    Ich kann Vollzug melden. :stolz_bin:
    Jetzt wird auch die Ordnerstruktur für das Installationsziel automatisch erstellt.

  • Hi BugFix,

    du hast wohl Recht. Ich hatte nicht die gesamte Ordnerstruktur (Ordner+Unterordner) vom Zielordner im Zielverzeichnis angelegt. So eine automatisches Anlegen von Ordnern, wie du es vorhast, wäre natürlich schick :)

  • Hallo BugFix.

    Wie bekomme ich im Anschluß es hin, das der Ordner "RECYCLER" gelöscht wird bzw. der Ordner am besten ja gar nicht erst erstellt wird.

    LG, CRazy-A.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Da du so geizig mit deinen Angaben bist ( Frauen sind doch eigentlich sehr schwatzhaft :P ), muß ich mal raten:
    Du wählst einen Ordner aus, in dem die zu installierenden Dateien liegen. Aber auch ($MS sei Dank ;) ) der allgegenwärtige Ordner RECYCLER.
    Na dann editiere die erstellte Installdatei und schmeiß einfach die Zeile mit dem Recycler raus, oder?

  • @ BugFix

    Also, wieso sind Frauen sehr schwatzhaft? In der Ruhe liegt die Kraft, die Gelassenheit und ...

    Außerdem ist es doch ein Forum und da sollte man doch kurz und sachlich versuchen ein Problem darzustellen. Oder?

    Aber Du hast mein Problem richtig verstanden und das was Du als Lsg. angeboten hast, istd er weg, den ich derzeitig auch immer gehe. Hatte aber vergessen, das ich das Script bereits auf der HDD hatte.

    LG, Crazy-A(lina).

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hiho,

    ist auf jeden fall ne schöne idee, leider finde ich es aber etwas gewöhnungsbedürftig, dass man das programm erst schließen muss,
    damit die ausgabedatei erstellt wird.

    hin und wieder möchte man ja auch mal mehrere sachen nacheinander mit nem tool machen und es nicht immer neu starten wollen.

    zusätzlich habe ich aber noch folgedes prob, beim ganz normalen erstellen eines scriptes:

    [autoit]

    C:\Documents and Settings\name\My Documents\Install.au3 (52) : ==> Incorrect number of parameters in function call.:
    _FileWriteLog(@DesktopDir & "\AutoScrIpTs\name\S.T.A.R.T.E.R\Extras\ = OK")
    ^ ERROR

    [/autoit]
  • ...To-Do-Liste...

    BugFix

    Wo finde ich die "AutoIt v3 - To-Do-Liste"?
    Das könnte ich privat und beruflich sehr gut gebrauchen. Endlich ein Ende mit der Zettelwirtschaft.

    Gruß, Crazy-A.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl