Skip to content

How to Re-register All DLLs in a Folder in Batch Script

Learn how to create a Batch script that automatically registers all DLL files in a folder using regsvr32, fixing 'Class not registered' errors with proper admin privileges and error handling.

Dynamic Link Libraries (DLLs) are shared code modules that multiple Windows applications use to perform common tasks. Occasionally, software installations or system updates can cause DLLs to become "unregistered," leading to errors like "Class not registered" or "DLL module not found". While you can register individual files manually, fixing a broken component often requires re-registering every DLL within a specific folder.

This guide will show you how to use a Batch script to iterate through a directory and register all DLL files using the regsvr32 utility.

Understanding regsvr32.exe

The regsvr32 command is the built-in Windows utility used to register and unregister OLE controls, such as DLLs and ActiveX controls, in the Windows Registry. When you "register" a DLL, you are essentially telling Windows where the file is located and how applications can interact with the functions inside it.

Core Syntax

  • regsvr32 <filename>.dll : Registers the file (shows a success popup).
  • regsvr32 /s <filename>.dll : Registers the file silently (no popup).

Implementing the Batch Loop

To register "all" files in a folder, we use a FOR loop. This allows the script to process every file ending in .dll without you needing to know their specific names.

The Basic Loop Configuration

@echo off
echo [PROCESS] Registering all DLLs in the current folder...

for %%f in (*.dll) do (
    echo Registering %%f...
    regsvr32 /s "%%f"
)

echo [SUCCESS] Operation complete.
pause

Creating a Robust Re-registration Script

A professional script should allow you to specify a target folder (like System32 or a specific application directory) and handle potential errors gracefully.

@echo off
setlocal EnableExtensions EnableDelayedExpansion

set "TARGET_DIR=C:\Windows\System32"
set "LOGFILE=%~dp0dll_registration_log.txt"

echo ============================================================
echo   Batch DLL Registration Utility (SAFE VERSION^)
echo ============================================================

:: 1. Admin check
net session >nul 2>&1
if errorlevel 1 (
    echo [ERROR] Administrator privileges required.
    pause
    exit /b 1
)

:: 2. Validate directory
if not exist "%TARGET_DIR%\" (
    echo [ERROR] Directory not found: %TARGET_DIR%
    pause
    exit /b 1
)

:: 3. Move to directory
pushd "%TARGET_DIR%" || (
    echo [ERROR] Cannot access directory.
    exit /b 1
)

echo [PROCESS] Scanning DLL files in %TARGET_DIR%...
echo [INFO] Logging to %LOGFILE%
echo.

set /a count=0
set /a success=0
set /a failures=0

for %%i in (*.dll) do (
    set /a count+=1

    regsvr32 /s "%%i"
    if errorlevel 1 (
        set /a failures+=1
        echo [FAIL] %%i>>"%LOGFILE%"
    ) else (
        set /a success+=1
        echo [OK] %%i>>"%LOGFILE%"
    )
)

popd

echo.
echo ============================================================
echo   Summary
echo ============================================================
echo Total DLLs processed : !count!
echo Successfully called  : !success!
echo Failed registrations : !failures!
echo Log file            : %LOGFILE%
echo ============================================================

pause
exit /b 0

Common Pitfalls and How to Avoid Them

32-bit vs 64-bit DLLs

One of the most confusing aspects of Windows is that 64-bit DLLs are usually in System32, while 32-bit DLLs are in SysWOW64.

Wrong Way:

:: Trying to register a 64-bit DLL with a 32-bit regsvr32
C:\Windows\SysWOW64\regsvr32.exe C:\Windows\System32\my_64bit_file.dll
:: This will result in an "Incompatible module" error.

Correct Way: Always use the version of regsvr32 that matches the DLL's architecture. If you aren't sure, using the default regsvr32 from a 64-bit Command Prompt will typically handle System32 correctly.

Non-Registerable DLLs

Not every .dll file can (or should) be registered. Only DLLs that export the DllRegisterServer function are compatible with regsvr32.

Best Practices for DLL Management

  1. Don't Re-register Everything: Blindly re-registering every DLL in C:\Windows\System32 is a "nuclear" option and should only be done as a last resort. It's often better to target only the DLLs of the specific application that is failing.
  2. Check Dependencies: If a DLL fails to register despite being a valid OLE control, it might be missing a dependency (another DLL). You can use tools like "Dependencies" (a modern rewrite of Dependency Walker) to identify what's missing.
  3. Logs: If you are deploying this via GPO or SCCM, redirect the output to a log file instead of using pause.

Conclusion

Re-registering all DLLs in a folder via Batch script is a powerful technique for resolving "Class not registered" errors and repairing broken COM components. By leveraging the FOR loop and the silent switch of regsvr32, you can automate what would otherwise be a tedious and error-prone manual process. Always ensure you are running with administrator privileges and consider the architecture (32-bit vs 64-bit) of the files you are targeting to ensure a successful and stable system repair.

Navigation