@echo off
title REMOVER DLLS CONFLITANTES - RDP - Beepsttore Sistemas -
color 0C

:: Verificar privilégios de administrador
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo ============================================
    echo     EXECUTE COMO ADMINISTRADOR!
    echo ============================================
    echo.
    echo Clique com botao direito no arquivo .bat
    echo e selecione "Executar como administrador"
    echo.
    pause
    exit /b 1
)

echo ============================================
echo     FINALIZANDO PROCESSOS
echo ============================================
echo.

:: Matar processos que podem estar usando as DLLs
taskkill /F /IM fbserver.exe 2>&1
taskkill /F /IM fbguard.exe 2>&1
taskkill /F /IM java.exe 2>&1
taskkill /F /IM javaw.exe 2>&1

:: Parar serviços do Firebird
net stop FirebirdServerDefaultInstance 2>&1
net stop FirebirdGuardianDefaultInstance 2>&1

echo.
echo ============================================
echo     REMOVENDO REGISTROS DAS DLLs
echo ============================================
echo.

:: Remover registros específicos das DLLs
for %%d in (capicom fbclient gds32 ib_util iconv libeay32 msvcr71 msxml5 ssleay32 zlib1) do (
    reg query "HKLM\SOFTWARE\Classes\%%d.dll" >nul 2>&1 && (
        echo Removendo registro: %%d.dll
        reg delete "HKLM\SOFTWARE\Classes\%%d.dll" /f 2>&1
    )
    reg query "HKLM\SOFTWARE\WOW6432Node\Classes\%%d.dll" >nul 2>&1 && (
        echo Removendo registro: %%d.dll (32 bits)
        reg delete "HKLM\SOFTWARE\WOW6432Node\Classes\%%d.dll" /f 2>&1
    )
)

echo.
echo ============================================
echo     REMOVENDO DLLs DO SYSTEM32
echo ============================================
echo.

call :RemoveDLL "C:\Windows\System32\capicom.dll"
call :RemoveDLL "C:\Windows\System32\fbclient.dll"
call :RemoveDLL "C:\Windows\System32\gds32.dll"
call :RemoveDLL "C:\Windows\System32\ib_util.dll"
call :RemoveDLL "C:\Windows\System32\iconv.dll"
call :RemoveDLL "C:\Windows\System32\libeay32.dll"
call :RemoveDLL "C:\Windows\System32\msvcr71.dll"
call :RemoveDLL "C:\Windows\System32\msxml5.dll"
call :RemoveDLL "C:\Windows\System32\ssleay32.dll"
call :RemoveDLL "C:\Windows\System32\zlib1.dll"

echo.
echo ============================================
echo     REMOVENDO DLLs DO SYSWOW64
echo ============================================
echo.

call :RemoveDLL "C:\Windows\SysWOW64\capicom.dll"
call :RemoveDLL "C:\Windows\SysWOW64\fbclient.dll"
call :RemoveDLL "C:\Windows\SysWOW64\gds32.dll"
call :RemoveDLL "C:\Windows\SysWOW64\ib_util.dll"
call :RemoveDLL "C:\Windows\SysWOW64\iconv.dll"
call :RemoveDLL "C:\Windows\SysWOW64\libeay32.dll"
call :RemoveDLL "C:\Windows\SysWOW64\msvcr71.dll"
call :RemoveDLL "C:\Windows\SysWOW64\msxml5.dll"
call :RemoveDLL "C:\Windows\SysWOW64\ssleay32.dll"
call :RemoveDLL "C:\Windows\SysWOW64\zlib1.dll"

echo.
echo ============================================
echo     COPIANDO NOVAS DLLs
echo ============================================
echo.

:: Verificar se a pasta de origem existe
if not exist "C:\app.tmp\dlls" (
    echo.
    echo ============================================
    echo        ERRO: PASTA NAO ENCONTRADA!
    echo ============================================
    echo.
    echo A pasta C:\app.tmp\dlls nao existe!
    echo.
    echo Certifique-se de que a pasta com as DLLs
    echo esta no local correto antes de continuar.
    echo.
    pause
    exit /b 1
)

echo Origem das DLLs: C:\app.tmp\dlls
echo.
echo Copiando DLLs para System32...
echo.

:: Copiar para System32
for %%d in (capicom.dll fbclient.dll gds32.dll ib_util.dll iconv.dll libeay32.dll msvcr71.dll msxml5.dll ssleay32.dll zlib1.dll) do (
    if exist "C:\app.tmp\dlls\%%d" (
        copy /y "C:\app.tmp\dlls\%%d" "C:\Windows\System32\%%d" 2>&1
        if %errorLevel% equ 0 (
            echo [OK] %%d copiado para System32
        ) else (
            echo [FALHA] Erro ao copiar %%d para System32
        )
    ) else (
        echo [AVISO] %%d nao encontrado na pasta de origem
    )
)

echo.
echo Copiando DLLs para SysWOW64...
echo.

:: Copiar para SysWOW64
for %%d in (capicom.dll fbclient.dll gds32.dll ib_util.dll iconv.dll libeay32.dll msvcr71.dll msxml5.dll ssleay32.dll zlib1.dll) do (
    if exist "C:\app.tmp\dlls\%%d" (
        copy /y "C:\app.tmp\dlls\%%d" "C:\Windows\SysWOW64\%%d" 2>&1
        if %errorLevel% equ 0 (
            echo [OK] %%d copiado para SysWOW64
        ) else (
            echo [FALHA] Erro ao copiar %%d para SysWOW64
        )
    ) else (
        echo [AVISO] %%d nao encontrado na pasta de origem
    )
)

:: Registrar as DLLs novamente (opcional)
echo.
echo Registrando as novas DLLs...
echo.

for %%d in (capicom.dll fbclient.dll gds32.dll ib_util.dll iconv.dll libeay32.dll msvcr71.dll msxml5.dll ssleay32.dll zlib1.dll) do (
    if exist "C:\Windows\System32\%%d" (
        regsvr32 /s "C:\Windows\System32\%%d"
        echo [OK] %%d registrado
    )
)

echo.
echo ============================================
echo        OPERACAO CONCLUIDA COM SUCESSO!
echo ============================================
echo.
echo DLLs removidas e substituidas com sucesso!
echo.
echo beep let's go :)!
echo.
echo Pressione qualquer tecla para sair...
pause >nul
exit /b 0

:RemoveDLL
set "dll_path=%~1"

if not exist "%dll_path%" (
    echo [OK] DLL nao encontrada: %dll_path%
    exit /b 0
)

echo Removendo: %dll_path%

:: Tentar desregistrar primeiro
regsvr32 /u "%dll_path%" /s 2>&1

:: Tomar posse do arquivo
takeown /f "%dll_path%" 2>&1

:: Dar permissão total
icacls "%dll_path%" /grant "%USERNAME%":F /grant Administradores:F 2>&1

:: Remover atributos
attrib -r -s -h "%dll_path%" 2>&1

:: Tentar deletar
del /f /q "%dll_path%" 2>&1
if %errorLevel% equ 0 (
    echo [OK] DLL removida: %dll_path%
) else (
    echo [FALHA] Nao foi possivel remover: %dll_path%
)

exit /b 0