Script für das Updaten von Programmen unterstützt von C#

  • Hallo,

    Ich habe ein Projekt am laufen welches automatisch zum Start des Computers die vorhandenen Programme Prüft (über eine .txt datei) und vergleicht die mit den server .txt... Die .txt der Vorhandenen Programmen wir von einem c# Programm erzeugt.
    Ich bekomme aus der .txt nur den namen des programms welches geupdated werden sollte... nun bekomme ich das nit hin...

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Global $c = 0 ;Variable für den Clienten Computer
    Global $a = 0
    Global $b = 0; Variable für den Server
    Global $i = 1
    Global $j = 1
    Global $vergleich
    Global $Instalation
    Global $ProgArraySharp[200]
    Global $ProgArraySer[200]
    Global $ProgArrayCli[200]
    ;;BlockInput(1)
    FileOpen("C:\Users\WIN_2\Desktop\AutoiT-uebergabe.txt")
    While ($i >= 1)
    ;$i dadrunter
    $vergleich = FileReadLine("C:\Users\WIN_2\Desktop\AutoiT-uebergabe.txt" , $i );Auslesen der Text Datei Reihe für Reihe
    $ProgArraySharp[$i-1] = StringSplit($vergleich,";");Wegschneiden der ;
    ;$vergleich = $ProgArraySharp[];Beschreiben der Variable mit den Geschnitenen Text, konzept: Jedes Wort(String) hat sein eigenes Array Element(Ein Platz)
    $i = $i + 1
    ;$pr1=@extended
    WEnd

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

    FileOpen("\\VBOXSVR\Downloads\Server-Programme.txt")
    While ($j >= 1) ; $j dadrunter
    $Instalation = FileReadLine("\\VBOXSVR\Downloads\Server-Programme.txt" , $j );Der Gleiche vorgang wie oben nur mit einer anderen Textdatei undzwar der des Servers welcher die Ausführbaren .exe sucht um diese Auszüfuhren[Diese sind die vo uns Angefertigten Skripte]
    $ProgArraySer[$j-1] = StringSplit($Instalation,";")
    ;$Instalation = $ProgArraySer[]
    ($j = $j + 1)
    ;$pr=@extended
    WEnd

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

    ;~ ; Hilfedatei File read line die letzte reihe ist die -1

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

    DO ;$ProgArraySharp[$a] <> $ProgArraySer[$c]
    ($c = $c + 3)
    If $ProgArrayCli[$a] == $ProgArraySer[$c] Then
    ($b = $c + 2)
    Run($ProgArraySer[$b])
    ($a = $a + 3)
    $c = 0
    EndIf
    Until UBound($ProgArrayCli)

    [/autoit]

    Einmal editiert, zuletzt von Der_Tornister (21. Juli 2011 um 15:54)

  • Hi,
    In deinem Skript sind ein paar sachen enthalten, die in AutoIt leider nicht korrekt sind.

    [autoit]

    $ProgArraySharp[$i-1] = StringSplit($vergleich,";");Wegschneiden der ;

    [/autoit]


    Das Funktioniert leider nicht, denn StringSplit gibt eine Array zurück die nicht automatisch in die Andere geschrieben wird. Wenn du wirklich nur das ; abtrennen willst, guck dir mal

    [autoit]

    StringTrimLeft
    StringTrimRight
    StringInStr

    [/autoit]


    an.


    Weiterhin brauchst du bei While keine Klammern für das Argument setzen.

    [autoit]

    While $j >= 1 ;das reicht völlig aus

    [/autoit]


    Auch das hier geht ohne Klammer:

    [autoit]

    ($j = $j + 1)

    [/autoit]


    Wenn du zwei Strings vergleichen willst, brauchst du nur ein = schreiben. Zwei = würden einen Case Sensitive Vergleich erzwingen.


    [autoit]

    DO ;$ProgArraySharp[$a] <> $ProgArraySer[$c]
    ($c = $c + 3)
    If $ProgArrayCli[$a] == $ProgArraySer[$c] Then
    ($b = $c + 2)
    Run($ProgArraySer[$b])
    ($a = $a + 3)
    $c = 0
    EndIf
    Until UBound($ProgArrayCli)

    [/autoit]

    Wenn du mit dieser Do Schleife versuchst, die Array durchzugehen dann wird das nicht gehen denn Do...Until läuft nur weiter wenn bei Until 0 herauskommt.
    Benutze statt dessen For...Next.

  • Könntest du mir denn einen Vorschlag machen wie ich die For... in ... Next Scheife da einbinden soll?

    und auch mit den StringTrimLeft denn das würde nur funktionieren wenn alle elemente in der txt gleich lang währen aber da ein name nicht so lang ist wie ein Pfad kann das zu komplikationen kommen... oder ich verstehe die funktionen nicht ...


    Währe dir sehr dankbar wenn du darauf eingehen könntest
    Das hier ist Der inhalt der txt die vom C# ausgegeben wird (also was fehlt[ist nur ein test])

    Spoiler anzeigen

    Dev-cpp


    Und das ist die Server txt wo die Namen Versions daten und genaue pfad ist (auch nur ein test dokument)

    Spoiler anzeigen

    Dev-Cpp;1.5;\\Server\Downloads\Dev-Cpp.exe;

    Bei der exe handelt es sich um ein script

  • Hab dein Script mal etwas umgeschrieben, wenn ich dich richtig verstanden habe, sollte das aber so funktionieren ;)

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Global $c = 0 ;Variable für den Clienten Computer
    Global $a = 0
    Global $b = 0; Variable für den Server
    Global $i = 1
    Global $j = 1
    Global $vergleich
    Global $Instalation
    Global $ProgArraySharp[200]
    Global $ProgArraySer[200]
    Global $ProgArrayCli[200]
    ;;BlockInput(1)
    $filepath = "C:\Users\WIN_2\Desktop\AutoiT-uebergabe.txt"
    $hFile = FileOpen($filepath) ; öffnet die Datei vom C Programm
    $hFile2 = "\\VBOXSVR\Downloads\Server-Programme.txt"
    $Serverarray = CSV2Array($hFile2) ; liest die Server.txt in ein Array ein
    $cnt = _FileCountLines("C:\Users\WIN_2\Desktop\AutoiT-uebergabe.txt") ; zählt die Anzahl an Programmen, die geupdated werden müssen
    For $i = 1 To $cnt
    $Filename = FileReadLine($hFile, $i) ; leist jedes zu updatende Programm ein
    For $k = 1 To UBound($Serverarray) - 1
    If $Serverarray[$k][0] = $Filename Then ; wenn das upzudatende Programm gefunden wurde
    RunWait($Serverarray[$k][2]) ; Startet das Programm
    Exitloop; geht zum nächsten Programm weiter
    EndIf
    Next
    Next

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

    Func _CSV2Array($hFile, $cSeperator = "auto", $bFilterString = True, $iColumnMode = 0)
    Local $s = FileRead($hFile)
    If @error Then Return SetError(1)
    If $cSeperator = Default Then $cSeperator = "auto"
    If Not $cSeperator Then $cSeperator = Opt("GUIDataSeparatorChar")
    ; searching the line-seperator and splitting the lines into an array
    Local $aLines
    If StringInStr($s, @CRLF) Then
    $aLines = StringSplit($s, @CRLF, 1)
    ElseIf StringInStr($s, @CR) Then
    $aLines = StringSplit($s, @CR)
    Else
    $aLines = StringSplit($s, @LF)
    EndIf
    ; searching the delimiter in the first line
    Local $aTMP
    If $cSeperator = "auto" Then
    Local $iMax = 0
    Local $iC[5] = [0, 0, 0, 0, 0]
    Local $sC[5] = [";", ",", @TAB, "|", " "]

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

    $aTMP = StringRegExp($aLines[1], ";", 3)
    If Not @error Then $iC[0] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], ",", 3)
    If Not @error Then $iC[1] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\t", 3)
    If Not @error Then $iC[2] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\|", 3)
    If Not @error Then $iC[3] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "[ ]", 3)
    If Not @error Then $iC[4] = UBound($aTMP)

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

    For $i = 0 To UBound($sC) - 1
    If $iC[$i] > $iMax Then
    $iMax = $iC[$i]
    $cSeperator = $sC[$i]
    EndIf
    Next
    EndIf
    ; creating 2-dim array based on the number of data in the first line
    $aTMP = StringSplit($aLines[1], $cSeperator)
    Local $iCol = $aTMP[0]
    Local $aRet[$aLines[0]][$iCol]
    ; splitting and filling the lines
    For $i = 1 To $aLines[0]
    $aTMP = StringSplit($aLines[$i], $cSeperator)
    If @error Then ContinueLoop
    If $aTMP[0] > $iCol Then
    Switch $iColumnMode
    Case 0
    Return SetError(2, $i)
    Case 1
    ReDim $aRet[$aLines[0] - 1][$aTMP[0]]
    Case 2
    $aTMP[0] = $iCol
    Case Else
    Return SetError(3)
    EndSwitch
    EndIf
    For $j = 1 To $aTMP[0]
    $aTMP[$j] = StringStripWS($aTMP[$j], 7)
    If $bFilterString Then ; removing leading and trailing " or '
    $aTMP[$j] = StringRegExpReplace($aTMP[$j], '^("|'')(.*?)\1$', '$2')
    EndIf
    $aRet[$i - 1][$j - 1] = $aTMP[$j]
    Next ; /cols
    Next ; /lines
    Return $aRet
    EndFunc ;==>_CSV2Array

    [/autoit]

    -EDIT- beim Array vertan, geändert

  • Also die skripte die hier eingebunden sind sind folgende:

    Hauptskript:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Global $c = 0 ;Variable für den Clienten Computer
    Global $a = 0
    Global $b = 0; Variable für den Server
    Global $i = 1
    Global $j = 1
    Global $vergleich
    Global $Instalation
    Global $ProgArraySharp[200]
    Global $ProgArraySer[200]
    Global $ProgArrayCli[200]
    ;;BlockInput(1)
    $filepath = "C:\Users\WIN_2\Desktop\AutoiT-uebergabe.txt"
    $hFile = FileOpen($filepath) ; öffnet die Datei vom C Programm
    $hFile2 = "\\VBOXSVR\Downloads\Server-Programme.txt"
    $Serverarray = CSV2Array($hFile2) ; liest die Server.txt in ein Array ein
    $cnt = _FileCountLines("C:\Users\WIN_2\Desktop\AutoiT-uebergabe.txt") ; zählt die Anzahl an Programmen, die geupdated werden müssen
    For $i = 1 To $cnt
    $Filename = FileReadLine($hFile, $i) ; leist jedes zu updatende Programm ein
    For $k = 1 To UBound($Serverarray) - 1
    If $Serverarray[$k][1] = $Filename Then ; wenn das upzudatende Programm gefunden wurde
    RunWait($Serverarray[$k][3]) ; Startet das Programm
    Exitloop; geht zum nächsten Programm weiter
    EndIf
    Next
    Next

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

    Func _CSV2Array($hFile, $cSeperator = "auto", $bFilterString = True, $iColumnMode = 0)
    Local $s = FileRead($hFile)
    If @error Then Return SetError(1)
    If $cSeperator = Default Then $cSeperator = "auto"
    If Not $cSeperator Then $cSeperator = Opt("GUIDataSeparatorChar")
    ; searching the line-seperator and splitting the lines into an array
    Local $aLines
    If StringInStr($s, @CRLF) Then
    $aLines = StringSplit($s, @CRLF, 1)
    ElseIf StringInStr($s, @CR) Then
    $aLines = StringSplit($s, @CR)
    Else
    $aLines = StringSplit($s, @LF)
    EndIf
    ; searching the delimiter in the first line
    Local $aTMP
    If $cSeperator = "auto" Then
    Local $iMax = 0
    Local $iC[5] = [0, 0, 0, 0, 0]
    Local $sC[5] = [";", ",", @TAB, "|", " "]

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

    $aTMP = StringRegExp($aLines[1], ";", 3)
    If Not @error Then $iC[0] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], ",", 3)
    If Not @error Then $iC[1] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\t", 3)
    If Not @error Then $iC[2] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\|", 3)
    If Not @error Then $iC[3] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "[ ]", 3)
    If Not @error Then $iC[4] = UBound($aTMP)

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

    For $i = 0 To UBound($sC) - 1
    If $iC[$i] > $iMax Then
    $iMax = $iC[$i]
    $cSeperator = $sC[$i]
    EndIf
    Next
    EndIf
    ; creating 2-dim array based on the number of data in the first line
    $aTMP = StringSplit($aLines[1], $cSeperator)
    Local $iCol = $aTMP[0]
    Local $aRet[$aLines[0]][$iCol]
    ; splitting and filling the lines
    For $i = 1 To $aLines[0]
    $aTMP = StringSplit($aLines[$i], $cSeperator)
    If @error Then ContinueLoop
    If $aTMP[0] > $iCol Then
    Switch $iColumnMode
    Case 0
    Return SetError(2, $i)
    Case 1
    ReDim $aRet[$aLines[0] - 1][$aTMP[0]]
    Case 2
    $aTMP[0] = $iCol
    Case Else
    Return SetError(3)
    EndSwitch
    EndIf
    For $j = 1 To $aTMP[0]
    $aTMP[$j] = StringStripWS($aTMP[$j], 7)
    If $bFilterString Then ; removing leading and trailing " or '
    $aTMP[$j] = StringRegExpReplace($aTMP[$j], '^("|'')(.*?)\1$', '$2')
    EndIf
    $aRet[$i - 1][$j - 1] = $aTMP[$j]
    Next ; /cols
    Next ; /lines
    Return $aRet
    EndFunc ;==>_CSV2Array

    [/autoit]

    also deins^^

    und Das von Dev-cpp

    Spoiler anzeigen
    [autoit]

    BlockInput(1)
    Run("devcpp.exe")
    WinWait("Dev-C++","Welcome",15)
    ControlClick("Dev-C++","Welcome","Button1")
    WinWait("Installer Language","Please select a language.",15)
    ControlCommand("Installer Language","Please select a language.","ComboBox1","Selectstring","Deutsch")
    ControlClick("Installer Language","Please select a language.","Button1")
    WinWait("Dev-C++","Lizenzabkommen",15)
    ControlClick("Dev-C++","Lizenzabkommen","Button2")
    WinWait("Dev-C++","Komponenten",15)
    ControlCommand("Dev-C++","Komponenten","ComboBox1","Selectstring","Full")
    ControlFocus("Dev-C++","Komponenten","SysTreeView321")
    ControlSend("Dev-C++","Komponenten","SysTreeView321", "{DOWN 8}" & "{SPACE}" & "{DOWN 2}" & "{SPACE}")
    ControlClick("Dev-C++","Komponenten","Button2")
    WinWait("Dev-C++","Zielverzeichnis",15)
    ControlSetText("Dev-C++","Zielverzeichnis","Edit1", "C:\Programme\Dev-Cpp\")
    ControlClick("Dev-C++","Zielverzeichnis","Button2")
    WinWaitActive("Dev-C++","Do you want")
    ControlClick("Dev-C++","Do you want","Button2")
    WinWait("Dev-C++","Die Installation von Dev-C++",15)
    ControlClick("Dev-C++","Die Installation von Dev-C++","Button4")
    ControlClick("Dev-C++","Die Installation von Dev-C++","Button2")
    BlockInput(0)

    [/autoit]

    Ansonsten sind nur noch die oben gemeinten textdateinen inbolviert ?(

    Einmal editiert, zuletzt von Der_Tornister (21. Juli 2011 um 15:55)

  • Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Global $c = 0 ;Variable für den Clienten Computer
    Global $a = 0
    Global $b = 0; Variable für den Server
    Global $i = 1
    Global $j = 1
    Global $vergleich
    Global $Instalation
    Global $ProgArraySharp[200]
    Global $ProgArraySer[200]
    Global $ProgArrayCli[200]
    ;;BlockInput(1)
    $filepath = "C:\Users\WIN_2\Desktop\AutoiT-uebergabe.txt"
    $hFile = FileOpen($filepath) ; öffnet die Datei vom C Programm
    $hFile2 = "\\VBOXSVR\Downloads\Server-Programme.txt"
    $Serverarray = CSV2Array($hFile2) ; liest die Server.txt in ein Array ein
    $cnt = _FileCountLines("C:\Users\WIN_2\Desktop\AutoiT-uebergabe.txt") ; zählt die Anzahl an Programmen, die geupdated werden müssen
    For $i = 1 To $cnt
    $Filename = FileReadLine($hFile, $i) ; leist jedes zu updatende Programm ein
    For $k = 1 To UBound($Serverarray) - 1
    If $Serverarray[$k][0] = $Filename Then ; wenn das upzudatende Programm gefunden wurde
    RunWait($Serverarray[$k][2]) ; Startet das Programm
    Exitloop; geht zum nächsten Programm weiter
    EndIf
    Next
    Next

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

    Func _CSV2Array($hFile, $cSeperator = "auto", $bFilterString = True, $iColumnMode = 0)
    Local $s = FileRead($hFile)
    If @error Then Return SetError(1)
    If $cSeperator = Default Then $cSeperator = "auto"
    If Not $cSeperator Then $cSeperator = Opt("GUIDataSeparatorChar")
    ; searching the line-seperator and splitting the lines into an array
    Local $aLines
    If StringInStr($s, @CRLF) Then
    $aLines = StringSplit($s, @CRLF, 1)
    ElseIf StringInStr($s, @CR) Then
    $aLines = StringSplit($s, @CR)
    Else
    $aLines = StringSplit($s, @LF)
    EndIf
    ; searching the delimiter in the first line
    Local $aTMP
    If $cSeperator = "auto" Then
    Local $iMax = 0
    Local $iC[5] = [0, 0, 0, 0, 0]
    Local $sC[5] = [";", ",", @TAB, "|", " "]

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

    $aTMP = StringRegExp($aLines[1], ";", 3)
    If Not @error Then $iC[0] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], ",", 3)
    If Not @error Then $iC[1] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\t", 3)
    If Not @error Then $iC[2] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\|", 3)
    If Not @error Then $iC[3] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "[ ]", 3)
    If Not @error Then $iC[4] = UBound($aTMP)

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

    For $i = 0 To UBound($sC) - 1
    If $iC[$i] > $iMax Then
    $iMax = $iC[$i]
    $cSeperator = $sC[$i]
    EndIf
    Next
    EndIf
    ; creating 2-dim array based on the number of data in the first line
    $aTMP = StringSplit($aLines[1], $cSeperator)
    Local $iCol = $aTMP[0]
    Local $aRet[$aLines[0]][$iCol]
    ; splitting and filling the lines
    For $i = 1 To $aLines[0]
    $aTMP = StringSplit($aLines[$i], $cSeperator)
    If @error Then ContinueLoop
    If $aTMP[0] > $iCol Then
    Switch $iColumnMode
    Case 0
    Return SetError(2, $i)
    Case 1
    ReDim $aRet[$aLines[0] - 1][$aTMP[0]]
    Case 2
    $aTMP[0] = $iCol
    Case Else
    Return SetError(3)
    EndSwitch
    EndIf
    For $j = 1 To $aTMP[0]
    $aTMP[$j] = StringStripWS($aTMP[$j], 7)
    If $bFilterString Then ; removing leading and trailing " or '
    $aTMP[$j] = StringRegExpReplace($aTMP[$j], '^("|'')(.*?)\1$', '$2')
    EndIf
    $aRet[$i - 1][$j - 1] = $aTMP[$j]
    Next ; /cols
    Next ; /lines
    Return $aRet
    EndFunc ;==>_CSV2Array

    [/autoit]

    Hatte es oben schon berichtigt, hatte mich beim Array vertan ^^. Ersetz mal bitte das alte Script ( von mir) mit dem hier

  • ok nun sind wir schonmal soweit das er mir nur noch sagt das ich einen unbekannten funktionsnamen habe...

    in Line 706


    Könnte ich zuanfang auch theoretisch eine einbindung eines"stiky bits" einfügen?


    Das wäre der nächste schritt wenn diese anfangshürde genommen ist...


    bis hierhin schonmal ein DICKES DANKESCHÖN hoffentlich kannst du mir weiterhin helfen :thumbup:

  • ich seh keine Zeile 706 ^^ Die beiden Schnipsel haben nur 120 Zeilen zusammen.

    Starte das Script einfach mal in Scite, dann kriegst du ja eine genauere Fehlermeldung

    achso, ein include noch vergessen ^^

    [autoit]

    #include <File.au3>

    [/autoit]
  • ok mir wird genaustens das ausgegeben:

    Spoiler anzeigen

    \\VBOXSVR\Downloads\NEU\nein\Hauptskript.au3 (17) : ==> Unknown function name.:
    $Serverarray = CSV2Array($hFile2)
    $Serverarray = ^ ERROR
    >Exit code: 1 Time: 1.311

  • Jetzt kommt janüüs mehr hmmmmmm


    mein aktueller code ist

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>
    Global $c = 0 ;Variable für den Clienten Computer
    Global $a = 0
    Global $b = 0; Variable für den Server
    Global $i = 1
    Global $j = 1
    Global $vergleich
    Global $Instalation
    Global $ProgArraySharp[200]
    Global $ProgArraySer[200]
    Global $ProgArrayCli[200]
    ;;BlockInput(1)
    $filepath = "C:\Users\WIN_2\Desktop\AutoiT-uebergabe.txt"
    $hFile = FileOpen($filepath) ; öffnet die Datei vom C Programm
    $hFile2 = "\\VBOXSVR\Downloads\Server-Programme.txt"
    $Serverarray = _csv2array($hFile2) ; liest die Server.txt in ein Array ein
    $cnt = _FileCountLines("C:\Users\WIN_2\Desktop\AutoiT-uebergabe.txt") ; zählt die Anzahl an Programmen, die geupdated werden müssen
    For $i = 1 To $cnt
    $Filename = FileReadLine($hFile, $i) ; leist jedes zu updatende Programm ein
    For $k = 1 To UBound($Serverarray) - 1
    If $Serverarray[$k][0] = $Filename Then ; wenn das upzudatende Programm gefunden wurde
    RunWait($Serverarray[$k][2]) ; Startet das Programm
    Exitloop; geht zum nächsten Programm weiter
    EndIf
    Next
    Next

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

    Func _csv2array($hFile, $cSeperator = "auto", $bFilterString = True, $iColumnMode = 0)
    Local $s = FileRead($hFile)
    If @error Then Return SetError(1)
    If $cSeperator = Default Then $cSeperator = "auto"
    If Not $cSeperator Then $cSeperator = Opt("GUIDataSeparatorChar")
    ; searching the line-seperator and splitting the lines into an array
    Local $aLines
    If StringInStr($s, @CRLF) Then
    $aLines = StringSplit($s, @CRLF, 1)
    ElseIf StringInStr($s, @CR) Then
    $aLines = StringSplit($s, @CR)
    Else
    $aLines = StringSplit($s, @LF)
    EndIf
    ; searching the delimiter in the first line
    Local $aTMP
    If $cSeperator = "auto" Then
    Local $iMax = 0
    Local $iC[5] = [0, 0, 0, 0, 0]
    Local $sC[5] = [";", ",", @TAB, "|", " "]

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

    $aTMP = StringRegExp($aLines[1], ";", 3)
    If Not @error Then $iC[0] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], ",", 3)
    If Not @error Then $iC[1] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\t", 3)
    If Not @error Then $iC[2] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\|", 3)
    If Not @error Then $iC[3] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "[ ]", 3)
    If Not @error Then $iC[4] = UBound($aTMP)

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

    For $i = 0 To UBound($sC) - 1
    If $iC[$i] > $iMax Then
    $iMax = $iC[$i]
    $cSeperator = $sC[$i]
    EndIf
    Next
    EndIf
    ; creating 2-dim array based on the number of data in the first line
    $aTMP = StringSplit($aLines[1], $cSeperator)
    Local $iCol = $aTMP[0]
    Local $aRet[$aLines[0]][$iCol]
    ; splitting and filling the lines
    For $i = 1 To $aLines[0]
    $aTMP = StringSplit($aLines[$i], $cSeperator)
    If @error Then ContinueLoop
    If $aTMP[0] > $iCol Then
    Switch $iColumnMode
    Case 0
    Return SetError(2, $i)
    Case 1
    ReDim $aRet[$aLines[0] - 1][$aTMP[0]]
    Case 2
    $aTMP[0] = $iCol
    Case Else
    Return SetError(3)
    EndSwitch
    EndIf
    For $j = 1 To $aTMP[0]
    $aTMP[$j] = StringStripWS($aTMP[$j], 7)
    If $bFilterString Then ; removing leading and trailing " or '
    $aTMP[$j] = StringRegExpReplace($aTMP[$j], '^("|'')(.*?)\1$', '$2')
    EndIf
    $aRet[$i - 1][$j - 1] = $aTMP[$j]
    Next ; /cols
    Next ; /lines
    Return $aRet
    EndFunc ;==>_CSV2Array

    [/autoit]

    Einmal editiert, zuletzt von Der_Tornister (21. Juli 2011 um 15:54)

  • Benutz bitte Spoiler, sonst muss man soweit scrollen ^^

    Was heißt denn es passiert nix? ^^

    [autoit]

    RunWait($Serverarray[$k][2])

    [/autoit]


    Er startet das Script, welches in der Textdatei hinterlegt ist, also in dem Beispielfall

    Code
    \\Server\Downloads\Dev-Cpp.exe


    und wartet, bis das Script geschlossen ist, und läuft dann weiter

  • Das Skript Läuft normal ab aber die Instalation Startet nicht...


    Bei compile kommt kein fehler ... ich bin solangsam mit meinem Latein am ende %(

  • also ich melde mich mal zu worte...

    Ich bin im selben Projekt eingebunden und kann nur noch langsam heulen... Ich bin derjenige der das C# Programm geschrieben hat und hab kA von auto it... Trotzdem möchte ich endlich mal fertig werden :P

  • Ok, versuchen wir es etwas anders ^^

    Versuche mal, das Script hier

    Spoiler anzeigen
    [autoit]

    BlockInput(1)
    Run("devcpp.exe")
    WinWait("Dev-C++","Welcome",15)
    ControlClick("Dev-C++","Welcome","Button1")
    WinWait("Installer Language","Please select a language.",15)
    ControlCommand("Installer Language","Please select a language.","ComboBox1","Selectstring","Deutsch")
    ControlClick("Installer Language","Please select a language.","Button1")
    WinWait("Dev-C++","Lizenzabkommen",15)
    ControlClick("Dev-C++","Lizenzabkommen","Button2")
    WinWait("Dev-C++","Komponenten",15)
    ControlCommand("Dev-C++","Komponenten","ComboBox1","Selectstring","Full")
    ControlFocus("Dev-C++","Komponenten","SysTreeView321")
    ControlSend("Dev-C++","Komponenten","SysTreeView321", "{DOWN 8}" & "{SPACE}" & "{DOWN 2}" & "{SPACE}")
    ControlClick("Dev-C++","Komponenten","Button2")
    WinWait("Dev-C++","Zielverzeichnis",15)
    ControlSetText("Dev-C++","Zielverzeichnis","Edit1", "C:\Programme\Dev-Cpp\")
    ControlClick("Dev-C++","Zielverzeichnis","Button2")
    WinWaitActive("Dev-C++","Do you want")
    ControlClick("Dev-C++","Do you want","Button2")
    WinWait("Dev-C++","Die Installation von Dev-C++",15)
    ControlClick("Dev-C++","Die Installation von Dev-C++","Button4")
    ControlClick("Dev-C++","Die Installation von Dev-C++","Button2")
    BlockInput(0)

    [/autoit]

    In das Hauptscript zu schreiben und dann mit

    [autoit]

    Switch

    [/autoit]

    zu arbeiten.
    Ich muss jetzt leider erstmal weg, morgen bin ich wieder da ;)

  • Guten morgen, teste mal das hier ;)

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    #include <Array.au3>
    Global $c = 0 ;Variable für den Clienten Computer
    Global $a = 0
    Global $b = 0; Variable für den Server
    Global $i = 1
    Global $j = 1
    Global $vergleich
    Global $Instalation
    Global $ProgArraySharp[200]
    Global $ProgArraySer[200]
    Global $ProgArrayCli[200]
    ;;BlockInput(1)
    $filepath = "C:\Users\WIN_2\Desktop\AutoiT-uebergabe.txt"
    $hFile = FileOpen($filepath) ; öffnet die Datei vom C Programm
    $hFile2 = "\\VBOXSVR\Downloads\Server-Programme.txt"
    $Serverarray = _CSV2Array($hFile2) ; liest die Server.txt in ein Array ein
    $cnt = _FileCountLines("C:\Users\WIN_2\Desktop\AutoiT-uebergabe.txt") ; zählt die Anzahl an Programmen, die geupdated werden müssen
    For $i = 1 To $cnt
    $Filename = FileReadLine($hFile, $i) ; leist jedes zu updatende Programm ein
    For $k = 1 To UBound($Serverarray) - 1
    If $Serverarray[$k][0] = $Filename Then ; wenn das upzudatende Programm gefunden wurde
    Switch $Filename
    Case "Dev-CPP"
    devcpp()
    Case "Anderes Programm"
    ;funktion

    EndSwitch
    Exitloop; geht zum nächsten Programm weiter
    EndIf
    Next
    Next

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

    Func _CSV2Array($hFile, $cSeperator = "auto", $bFilterString = True, $iColumnMode = 0)
    Local $s = FileRead($hFile)
    If @error Then Return SetError(1)
    If $cSeperator = Default Then $cSeperator = "auto"
    If Not $cSeperator Then $cSeperator = Opt("GUIDataSeparatorChar")
    ; searching the line-seperator and splitting the lines into an array
    Local $aLines
    If StringInStr($s, @CRLF) Then
    $aLines = StringSplit($s, @CRLF, 1)
    ElseIf StringInStr($s, @CR) Then
    $aLines = StringSplit($s, @CR)
    Else
    $aLines = StringSplit($s, @LF)
    EndIf
    ; searching the delimiter in the first line
    Local $aTMP
    If $cSeperator = "auto" Then
    Local $iMax = 0
    Local $iC[5] = [0, 0, 0, 0, 0]
    Local $sC[5] = [";", ",", @TAB, "|", " "]

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

    $aTMP = StringRegExp($aLines[1], ";", 3)
    If Not @error Then $iC[0] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], ",", 3)
    If Not @error Then $iC[1] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\t", 3)
    If Not @error Then $iC[2] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\|", 3)
    If Not @error Then $iC[3] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "[ ]", 3)
    If Not @error Then $iC[4] = UBound($aTMP)

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

    For $i = 0 To UBound($sC) - 1
    If $iC[$i] > $iMax Then
    $iMax = $iC[$i]
    $cSeperator = $sC[$i]
    EndIf
    Next
    EndIf
    ; creating 2-dim array based on the number of data in the first line
    $aTMP = StringSplit($aLines[1], $cSeperator)
    Local $iCol = $aTMP[0]
    Local $aRet[$aLines[0]][$iCol]
    ; splitting and filling the lines
    For $i = 1 To $aLines[0]
    $aTMP = StringSplit($aLines[$i], $cSeperator)
    If @error Then ContinueLoop
    If $aTMP[0] > $iCol Then
    Switch $iColumnMode
    Case 0
    Return SetError(2, $i)
    Case 1
    ReDim $aRet[$aLines[0] - 1][$aTMP[0]]
    Case 2
    $aTMP[0] = $iCol
    Case Else
    Return SetError(3)
    EndSwitch
    EndIf
    For $j = 1 To $aTMP[0]
    $aTMP[$j] = StringStripWS($aTMP[$j], 7)
    If $bFilterString Then ; removing leading and trailing " or '
    $aTMP[$j] = StringRegExpReplace($aTMP[$j], '^("|'')(.*?)\1$', '$2')
    EndIf
    $aRet[$i - 1][$j - 1] = $aTMP[$j]
    Next ; /cols
    Next ; /lines
    Return $aRet
    EndFunc ;==>_CSV2Array

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

    Func devcpp()
    BlockInput(1)
    ShellExecute("devcpp.exe") ; hier noch den kompletten Pfad angeben
    WinWait("Dev-C++","Welcome",15)
    ControlClick("Dev-C++","Welcome","Button1")
    WinWait("Installer Language","Please select a language.",15)
    ControlCommand("Installer Language","Please select a language.","ComboBox1","Selectstring","Deutsch")
    ControlClick("Installer Language","Please select a language.","Button1")
    WinWait("Dev-C++","Lizenzabkommen",15)
    ControlClick("Dev-C++","Lizenzabkommen","Button2")
    WinWait("Dev-C++","Komponenten",15)
    ControlCommand("Dev-C++","Komponenten","ComboBox1","Selectstring","Full")
    ControlFocus("Dev-C++","Komponenten","SysTreeView321")
    ControlSend("Dev-C++","Komponenten","SysTreeView321", "{DOWN 8}" & "{SPACE}" & "{DOWN 2}" & "{SPACE}")
    ControlClick("Dev-C++","Komponenten","Button2")
    WinWait("Dev-C++","Zielverzeichnis",15)
    ControlSetText("Dev-C++","Zielverzeichnis","Edit1", "C:\Programme\Dev-Cpp\")
    ControlClick("Dev-C++","Zielverzeichnis","Button2")
    WinWaitActive("Dev-C++","Do you want")
    ControlClick("Dev-C++","Do you want","Button2")
    WinWait("Dev-C++","Die Installation von Dev-C++",15)
    ControlClick("Dev-C++","Die Installation von Dev-C++","Button4")
    ControlClick("Dev-C++","Die Installation von Dev-C++","Button2")
    BlockInput(0)
    EndFunc

    [/autoit]

    In der Funktion devcpp bitte noch den vollen Pfad hinzufügen :)

  • Sry,... aber das skript startet einfach nicht...

    Wir haben 0 Errors und 0 Warnings


    ich weiß nicht mehr weiter :cursing:

  • Debugge halt mal ein bisschen, schau nach ob die pfade korrekt sind, was liefert denn shellexecute zurück, du kannst auch mal das workingdir ändern.
    Bei 0 Fehlern und keiner Warnung ist das script durchgelaufen, und es gab keine internen fehler (falsche arraygröße z.B.) im scripting, aber ob die datei gefunden wurde oder nicht ist kein fehler, der dir so zurück geliefert wird, den musst du abfragen