Problem mit IniREAD

  • Moin,

    ich hab mir hier ein kleines Tool geschrieben, das testen soll ob Programm X aktuell ist oder nicht.

    [autoit]

    If FileExists("C:\Program Files\Java\jre6\bin\java.exe") Then
    Local $versionjava = FileGetVersion("C:\Program Files\Java\jre6\bin\java.exe")
    GUICtrlSetData($sobjava, $versionjava)
    GUICtrlSetState($socjava,$GUI_CHECKED)

    Local $filejava = IniRead($appver, "Java", "Version","conf-error")
    If $filejava = -1 Then
    GUICtrlSetBkColor($sobjava,0xFFD700)
    Else
    Local $linejava = FileReadLine($filejava)
    If @error = -1 Then ExitLoop
    If $linejava = $versionjava Then
    GUICtrlSetBkColor($sobjava,0xADFF2F)
    Else
    GUICtrlSetBkColor($sobjava,0xFF4500)
    msgbox(0, "","version in programm ist " & $versionjava & " in ini: " & $filejava)
    Endif
    FileClose($filejava)
    EndIf
    EndIf

    [/autoit]


    Problem ist $versionjava und $filejava den gleichen Wert ausgeben, trotzdem wird das Feld rot = nicht gleiche Version. (Siehe Screenshot)

    [autoit]

    [Java]Version=6.0.430.1

    [/autoit]



    Vorher hatte ich die Versionnummer in der .txt Datei, das hat super funktioniert (in der txt datei stand dann nur "6.0.430.1")

    [autoit]

    Local $fileff = FileOpen("\\xxxxx\install$\Programme\Firefox\version.txt", 0)

    [/autoit]


    Mit InIread geht das vergleichen der Version nicht mehr, obwohl via msgbox (siehe Screenshot) beide auch den gleichen Wert ausgeben...

  • Hallo lacie,

    zunächst würde ich dich bitten deinen Code nochmal gebrochen zu updaten oder neu zu posten. So ist es echt doof wenn man etwas nachvollziehen möchte.

    Kannst du den .ini Eintrag vielleicht dazu posten? Oder hast du vielleicht dort etwas falsches stehen? Ein paar mehr Informationen halt um das Problem besser beurteilen zu können.

    Wenn ich das nun richtig gesehen habe machst du auf das IniRead ein FileReadLine? Das wird dann das Problem sein denke ich ...

    Wie m-obi schon erwähnt hat, schau die IniRead nochmal an. Im Erfoglsfall gibt es das wieder was an der besagten Stelle in der .ini steht.

    So Far

    Grüße Yaerox

    Grüne Hölle

  • Du solltest dir vielleicht mal ansehen wie IniRead funktioniert.


    .... was soll ich mir da ansehen?

    Hallo lacie,

    zunächst würde ich dich bitten deinen Code nochmal gebrochen zu updaten oder neu zu posten. So ist es echt doof wenn man etwas nachvollziehen möchte.


    hatte ich eigentlich, nach dem posten war es nicht mehr da. Hab den Beitrag etwas angepasst

  • Zitat

    .... was soll ich mir da ansehen?

    Die Erklärung des 4. Funktionsparameters und die Erklärung zu den möglichen Return Werten der Funktion wäre schonmal ein Anfang. Diese Prüfung hier wird jedenfalls immer False ergeben, da iniread im Fehlerfall bei dir niemals -1, sondern "conf-error" zurückgeben wird:

    [autoit]


    Local $filejava = IniRead($appver, "Java", "Version","conf-error")
    If $filejava = -1 Then
    GUICtrlSetBkColor($sobjava,0xFFD700)

    [/autoit]


    Das ist aber nicht dein Hauptproblem, das startet prinzipiell hier:

    [autoit]


    Else
    Local $linejava = FileReadLine($filejava)
    If @error = -1 Then ExitLoop

    [/autoit]

    Dies ist unnötig, bzw. falsch. Du hast die Versionsnummer aus der ini doch schon in $filejava stehen (durch iniread ermittelt...). Filereadline würde außerdem keine Versionsnummer als Parameter erwarten, sondern den Dateinamen der (ini) Datei. Ein exitloop ist hier auch völlig fehl am Platz, ich sehe weit und breit keine Schleife, die du damit verlassen könntest.

    Dein anschließender Vergleich nach Entfernung der oben genannten Zeilen müsste also so lauten:

    [autoit]

    If $filejava = $versionjava Then

    [/autoit]

    Zu letzt machst du noch das hier:

    [autoit]

    FileClose($filejava)

    [/autoit]

    Unnötig, denn ich sehe kein fileopen(), außerdem ist $filejava kein Dateihandle (und auch kein Dateipfad, siehe oben), sondern die aus der ini ausgelesene Versionsnummer, also ein simpler String. Das kann man nicht schließen, hier gibts nix zu schließen.

    Da ich mal davon ausgehe, dass du nicht nur prüfen willst ob die Versionsnummer der ini ungleich der installierten Version ist, sondern vermutlich auch wissen willst ob die installierte neuer oder älter ist nutzt dir der ganze Vergleich vermutlich so wie er jetzt ist nicht viel. Daher solltest du dir in der Hilfe noch diese Funktion ansehen:

    [autoit]

    _versioncompare()

    [/autoit]
  • Du hast da etwas durcheinander geworfen.

    Du fragst aus der .ini eine Version ab. Erwartest aber scheinbar einen Pfad zu einer Datei.
    Angenommen in deiner .ini steht bei Version=1.0.0.0. Dann sagst du: FileReadLine("1.0.0.0").
    FileReadLine ( "filehandle/filename" [, line] ) ; Somit hast du hier einen falschen Parameter.
    Folglich wird er dir immer sagen deine Bedingung ist falsch und gibt die MsgBox aus.

    Nebenbei: Du könntest statt $filejava = -1 auch einfach If @error Then nehmen sofern du als 4ten Parameter default lässt. Ob du den default Wert auch ändern kannst, und trotzdem @error nutzen kannst müsstest mal kurz ausprobieren. Jedenfalls wird diese Bedingung ebenfalls nie erfüllt werden...

    Grüße Yaerox

    Grüne Hölle

  • Nebenbei: Du könntest statt $filejava = -1 auch einfach If @error Then nehmen sofern du als 4ten Parameter default lässt. Ob du den default Wert auch ändern kannst, und trotzdem @error nutzen kannst müsstest mal kurz ausprobieren. Jedenfalls wird diese Bedingung ebenfalls nie erfüllt werden...

    Nö. Zumindestens sofern die Hilfe von iniread vollständig ist wird kein @error im Fehlerfall gesetzt. Es gibt außerdem keinen "default" Wert für den 4. Parameter, dieser ist kein optionaler, sondern ein Pflichtparameter. Man entscheidet also selbst was die Funktion im Fehlerfall zurückgibt, hier wie schon erwähnt der String "conf-error".

  • Nö. Zumindestens sofern die Hilfe von iniread vollständig ist wird kein @error im Fehlerfall gesetzt. Es gibt außerdem keinen "default" Wert für den 4. Parameter, dieser ist kein optionaler, sondern ein Pflichtparameter. Man entscheidet also selbst was die Funktion im Fehlerfall zurückgibt, hier wie schon erwähnt der String "conf-error".

    Uii hab da auf die schnelle in einem alten Script nachgeschaut wie ich es dort gemacht habe. Ja mir ist das mit dem 4. Parameter klar, jedoch dachte ich bisher dass IniRead im Fehlerfall @error trotzdem setzt.
    Naja dann halt $var = "wert-der-als-4-parameter-eingetrage-ist".

    Werd das bei Gelegenheit nochmal ausprobieren sonst muss ich das bei mir auch nochmal ändern ^^

    Grüße Yaerox

    Grüne Hölle