Projektidee: AutoIT Setup Builder

  • Wollte mal fragen ob es generell Bedarf für ein Programm gibt, dass eine Setupdatei erstellt.
    Die Befehle von AutoIT (Reg-Befehle, Fileinstall) sind ja schon gut geeignet für ein solches Vorhaben.
    Als Ziel des Programms würde ich mir eine kompilierbare *.au3 Datei vorstellen welche den Vorteil hat überprüft zu werden (kein Schadcode) und vom Benutzer bei Bedarf angepasst werden kann falls das Setup Programm ganz bestimmte Aufgaben erfüllen soll.

    Sollte Interesse an einem solchen Programm bestehen würde ich mich über Hilfe von erfahrenen Forumsteilnehmern freuen da ich mir ein so großes Projekt nicht alleine zutraue.

  • Hihi, die Gui kommt mir irgendwie bekannt vor. Glaube der Smart Install maker wars den ich mir eben angesehen habe. ;)

    Darf man fragen woran es damals gescheitert ist?

  • hi
    Ich habe bei meinen Beispiel Scripts schon so etwas liegen, hatt wenn ich micht nicht irre Bugfix geschrieben ( BugFix wenn du es nicht möchtest das dein script hier steht bitte löschen)
    ich poste es mal, vielleicht könnt ihr ja etwas damit anfangen ist wie gewohnt Top Arbeit von BugFix ^^

    MFG Eistee

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ComboConstants.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <ButtonConstants.au3>
    #include <ListBoxConstants.au3>
    #include <TabConstants.au3>
    #include <EditConstants.au3>
    #include <DateTimeConstants.au3>
    #include <SliderConstants.au3>
    #include <TreeViewConstants.au3>
    #include <ProgressConstants.au3>
    #include <AVIConstants.au3>
    #include <UpDownConstants.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]
  • Hi,

    ch würdde bei diesem Projekt gerne mitmachen. Ich kann ja den BeispielInstaller schreiben, den man per IniWrite anpassen kann. Also ungefähr so:

    $Title = "Test Installer"

    Die RegistryEinträge kann man ja in eine Textdatei schreiben lassen und per Stringsplit in einzelne Befehle splitten. Diese können dann per Execute ausgeführt werden. Statt FileInstall würde ich lieber die 7z UDF benutzen, da es sehr viel Platz spart.

  • Sehr schön *freu*

    Ich denke wenns es für das Projekt ein Team von 3 - 4 Leuten gibt kann man die Details der Umsetzung besprechen und welche Ziele erreicht werden sollen. War mir auch am überlegen ob es mit 7zip Sinn macht, hab nur keinen Erfahrungswert nachdem ich das hätte entscheiden können.

    Generell würde ich vorschlagen dass das Programm erstmal sehr minimalistisch gehalten wird aber eben so designed dass man neue Funktionen einfach hinzufügen kann.

  • Zitat

    Da ich was das scripten anbelangt nicht wirklich gut bin könnte ich euch nur anbieten das design u machen da ich mit photoshop arbeiten kann also nur wenn ihr wollt und das überhaupt braucht

    Ein Installer ohne irgendwelche Grafiken sieht doch langweilig aus ;) . Grafiken braucht man da fast immer.

    Das erste was man jetzt noch machen muss, ist sich einen Namen für dieses Programm zu überlegen.
    Also sowas wie: AutSetup ,AutIntaller usw... :D

  • So ich hatte mal etwas Zeit und hab mal ein Beispiel gemacht wie ich mir in etwa die Gui vorstelle.

    Grafisch aufwerten liegt mir nicht so, mir ist eher wichtig dass es läuft.
    Das Tab Steuerelemt ist eher aus taktischen Gründen drin, immerhin lässt sich so die GUI gut in Koda erstellen und zudem spart man sich ne Menge Code der dafür sorgt das andere Steuerelemente unsichtbar werden.

    Ich geb aber gerne zu dass der GUI von Deepred Klasse aussieht.
    Möchte halt nur grade am Anfang nicht dass irgendwie Frust aufkommt weil irgendein Icon nicht da ist wo es hin soll.
    Soll ja Spass machen das Ganze.

  • Hi,

    deine Idee ist an sich auch nicht schlecht. Erinnert irgendwie an den AutoItWrapper :D .
    Statt *.txt würde ich dem User noch die Möglichkeit geben, auch *.rtf -Dateien als Lizenz zu nutzen.

    Ich versuche gerade einen neuen Installer zu schreiben. Beim starten des Installers wird eine Gezippte Datei in den Temporären Verzeichniss entpackt. Hier:

  • Die Idee hat wie gesagt vor allen Dingen praktische Gründe Ich wollte es aber so bauen, dass die Gui auch hinterher vollständig austauschbar ist. Ansonsten sollte ja auch erstmal nur die Richtung anzeigen. Für die erste Version reicht es wenn die Tabs "Dateien" und "Registry" lauffähig sind.

    Dein Installer sieht auch schon gut aus.

    Achja, Raupi hat angeboten uns etwas Platz auf seinem Gobby Server zu reservieren sodass wir jederzeit die aktuelle Version vom Code bereitsteht. Hast du Gobby installiert oder wärst bereit es zu installieren? Dann könnte ich Raupi bescheid sagen

    • Offizieller Beitrag

    ich hätte nichts dagegen, es zu installieren.

    Habe dir eine PN mit den Zugangsdaten geschickt. Kannst ja mal rumprobieren.