Alle DDLs einen Verzeichnisses einlesen, und Registrieren mit regsvr32 /s

  • Hallo zusammen

    Ich versuche alle DLLs eine Verzeichnisses auszulesen, und will dann jedes einzelne mit regsvr32.dll /s registrieren

    [autoit]


    #Include <File.au3>
    #Include <Array.au3>
    $FileList=_FileListToArray("C:\Program Files\Folder.net", "*.dll")
    If @Error=1 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
    EndIf

    [/autoit]

    Wie müsste nun der Teil mit der Registrierung der DLL aussehen?


    So klappt es ja leider nicht :cursing:

    For $i = 1 To $FileList[0] ; zeilenweise durchgehen
    RunWait(@COMSPEC & ' /c regsvr32 /s ' & $Pfad & $i , "", @SW_HIDE)
    MsgBox(4096, "Test", $i, 3)
    Next

    Einmal editiert, zuletzt von Surfy (2. Dezember 2009 um 10:04)

  • Hui, leider habe ich Deine Antwort erst jetzt gesehen ;(

    Ich habe es so probiert, was sich zwar auch compilieren lässt, aber die Dateien nicht registriert ?(

    [autoit]

    #Include <File.au3>
    #Include <Array.au3>
    $Pfad="C:\Program Files\folder.net\"
    $FileList=_FileListToArray("C:\Program Files\folder.net", "*.dll")
    If @Error=1 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
    EndIf
    For $i = 1 To $FileList[0] ; zeilenweise durchgehen
    RunWait(@COMSPEC & " /c regsvr32 /s " & Chr (34) & $Pfad & $FileList[$i] & Chr (34) , "", @SW_HIDE)
    Next
    For $i = 1 To $FileList[0] ; zeilenweise durchgehen
    RunWait(@COMSPEC & " /c regasm " & Chr (34) & $Pfad & $FileList[$i] & Chr (34) , "", @SW_HIDE)
    Next
    For $i = 1 To $FileList[0] ; zeilenweise durchgehen
    RunWait(@COMSPEC & " /c gacutil /i" & Chr (34) & $Pfad & $FileList[$i] & Chr (34) , "", @SW_HIDE)
    Next

    [/autoit]


    Sieht jemand, wieso das nicht will?

  • Ich doofie

    gacutil und regasm liegen natürlich in %ProgramFiles%\Folder.net

    [autoit]


    $Pfad="C:\Program Files\Folder.net\"
    $FileList=_FileListToArray("C:\Program Files\Folder.net", "*.dll")
    If @Error=1 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
    EndIf
    ; _ArrayDisplay($FileList,"$FileList")
    For $i = 1 To $FileList[0] ; zeilenweise durchgehen
    RunWait(@COMSPEC & " /c regsvr32 /s " & Chr (34) & $Pfad & $FileList[$i] & Chr (34) , "", @SW_HIDE)
    Next
    For $i = 1 To $FileList[0] ; zeilenweise durchgehen
    RunWait(@COMSPEC & " /c " & Chr (34) & $Pfad & "regasm.exe" & Chr (34) & " " & Chr (34) & $Pfad & $FileList[$i] & Chr (34) , "", @SW_HIDE)
    Next
    For $i = 1 To $FileList[0] ; zeilenweise durchgehen
    RunWait(@COMSPEC & " /c " & Chr (34) & $Pfad & "gacutil.exe" & Chr (34) & " /i " & Chr (34) & $Pfad & $FileList[$i] & Chr (34) , "", @SW_HIDE)
    Next

    [/autoit]

    Aber noch immer will das ganze nicht :-/

  • Hi,

    was funktioniert denn nicht?

    Zum debuggen nimm mal das @SW_HIDE raus und ersetz /c durch /k. Dann siehst Du die Fehlermeldungen bzw. den Aufruf von regsvr32.

    ;-))
    Stefan

  • Hier eine weitere Möglichkeit:

    [autoit]


    $Pfad = "C:\Program Files\Folder.net\"
    $FileList = FileFindFirstFile($Pfad & "*.dll")
    If $FileList= -1 Then
    FileClose($FileList)
    MsgBox(0, "Error", "Nichts gefunden! :-(")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($FileList)
    If @error Then ExitLoop
    ;~ RunWait(@COMSPEC & " /c regsvr32 /s " & Chr (34) & $Pfad & $file & Chr (34) , "", @SW_HIDE)
    ConsoleWrite(@ComSpec & ' /c regsvr32 /s "' & $Pfad & $file & '"' & @CRLF)
    WEnd
    FileClose($FileList)

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • :huh:

    Danke für eure Hilfe!

    Ziel ist es, ein paar DLLs zu regristrieren und mit Gacutil und regasm zu behandeln.

    Wenn ich in meinem Beispiel /k verwende, kommt immer ein leeres Konsolenfenster.

    @ UEZ:


    Wie wende ich dein Beispiel an, wenn ich die regasm und gacutil verwenden will, die auch im Verzeichniss (Programfiles\folder.net) liegen, um auch diese beiden tools mit allen DLLS aus dem Verzeichniss zu behandeln? In einem Dos-Fenster ist dies ein dreizeiler ;(

    c:

    cd Program Files\folder.net

    for %m in (*.dll) do regasm %m

    for %m in (*.dll) do gacutil /i %m

    for %m in (*.dll) do regsvr32 /s %m


    ;(