dll´s automatisch registrieren

  • was ist an dem code falsch?


  • was ist an dem code falsch?


    Die Frage ist eher, was überhaupt richtig ist. Alleine beim Überfliegen der ersten Zeilen sehe ich schon etliche Fehler.


    1. Du rufst isAdmin() auf kümmerst dich aber nicht um das Ergebnis, also kannste die Zeile auch weglassen.
    2. Du deklarierst die Variablen $tPath, durchs Deklarieren hat diese Variable aber noch garkeinen Inhalt.

    Global $sFile,$tFile,$tPath

    3. Diese leere Variablen verwendest du nun um ein Suchhandel zu bekommen, was natürlich nichts bzw. nur einen Fehler zurückgeben dürfte
    Global $tSearch = FileFindFirstFile($tPath & "\*.dll")
    4. Jetzt wo es schon zu spät ist versuchst du $tPath mit Inhalt zu befüllen, das machst du aber falsch
    If @OSArch = "64" Then
    $tPath = "\%Systemroot%\System32\" ;Die 64-Bit-Version ist
    Else
    If @OSArch = "86" Then
    $tPath = "\%Systemroot%\SysWoW64\" ;Die 32-Bit-Version ist
    EndIf
    EndIf


    Warum?


    Zitat von Hilfe

    @OSArch --> Gibt eines der folgendes zurück:"X86","IA64","X64" - dies ist der Architekturtyp des aktuell laufenden Betriebssystems.


    Du prüfst also auf ungültige Werte, somit wird deine Variable keinen Inhalt haben, aber dafür ists ja ohnehin zu spät...


    5. Du hast eine while Schleife, die grundsätzlich nach dem ersten Durchlauf verlassen wird, wozu dann überhaupt eine Schleife?
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    $tFile = FileFindNextFile($tSearch)
    If @error Then _Neu()
    _Version()
    ExitLoop ; <--------------------- Verlässst die Schleife !!!!
    WEnd


    Ich habe hier dann aufgehört weiter zu suchen, vermutlich schlummern aber noch mehr Fehler im Code.

  • Ahja nochmal was:



    Func _Version()


    Local $Fileversion1 = FileGetVersion($hSearch, 1)
    If @error Then _Time()
    Local $Fileversion2 = FileGetVersion($tSearch, 1)
    If @error Then _Time()


    If $Fileversion1 > $Fileversion2 Then
    FileDelete($Fileversion2)
    Sleep(50)
    FileCopy($Fileversion1 , $Fileversion2, 9)
    Sleep(50)
    ShellExecute("regsvr32.exe" , ' /s ' & $tPath & "/" & $tFile & "'")
    ConsoleWrite("Dll registriert: " & $tFile & @CRLF)
    Sleep(50)
    Else
    FileDelete($Fileversion1)
    Sleep(50)
    ConsoleWrite("KEINE Dll registriert: " & $tFile & @CRLF)
    Sleep(50)
    Endif


    EndFunc


    Du vergleichst hier zwei Strings miteinander, das wird sehr wahrscheinlich nicht das gewünschte Ergebnnis liefern, sondern eher zufällige Ergebnisse. In deinem Fall verwendest du im Übrigen auch noch einen ungültigen Wert für den 1. Parameter (Suchhandele statt Dateiname) und einen falschen 2. Parameter von filegetversion() (Zahl statt String, siehe Hilfe). Das Ergebnis ist daher immer ein leerer String.


    Wenn du zwei Dateiversionen vergleichen willst verwende

    #Include <Misc.au3>
    _VersionCompare($sVersion1, $sVersion2)


    Danach willst du die ältere von beiden Dateien löschen, aber dann solltest du dazu wohl auch den Dateipfad angeben und nicht die Versionsnummer. Eine Versionsnummer kannst du schlecht löschen. Genausowenig kannst du Versionsnummern kopieren.


    Die selben Fehler machst du auch in deiner Funktion _Time(). Du verwendest falsche Parameter um die Erstellzeit zu ermitteln und du versuchst Uhrzeiten zu löschen bzw. zu kopieren.

  • Sorry für den tripple Post, aber jetzt weiß ich auch wieder wer du bist. Du warst der "Updater-Thread Typ", davon ab hast du schon etliche Threads zum Thema DLL registrieren / Version prüfen. Gelernt hast du aus deinen vergangenen Threads scheinbar nichts. Du solltest mal anfangen die Hilfe zu lesen und weniger Copy & Paste Programmierung betreiben.