@echo off
: Register.bat
:
: ShellExtension.dll is a so called 'Shell Extension'
: allowing user to start WinMerge from explorer's context
: menu to compare selected files/directories.
: However this dll file must be registered for
: Windows before it works.
:
: ShellExtension.dll can be unregistered with command:
: "Register.bat /U"

IF "%OS%" == ""                          Set DLLPATH=%0\..\ShellExtension.dll
IF "%PROCESSOR_ARCHITECTURE%" == "x86"   Set DLLPATH=%~dp0%ShellExtensionU.dll
IF "%PROCESSOR_ARCHITECTURE%" == "AMD64" Set DLLPATH=%~dp0%ShellExtensionX64.dll
IF "%PROCESSOR_ARCHITECTURE%" == "IA64"  Set DLLPATH=%~dp0%ShellExtensionX64.dll

IF "%1" == "/u" Goto Uninstall
IF "%1" == "/U" Goto Uninstall

Echo Registering ShellExtension.dll...
IF "%OS%" == "" %WINDIR%\System\RegSvr32 "%DLLPATH%"
IF "%OS%" == "" Goto End
Call :ExecuteRegSvr32 "%DLLPATH%"
Goto End

:Uninstall
Echo UnRegistering ShellExtension.dll...
IF "%OS%" == "" %WINDIR%\System\RegSvr32 /u "%DLLPATH%"
IF "%OS%" == "" Goto End
Call :ExecuteRegSvr32 /u "%DLLPATH%"
Goto End

:ExecuteRegSvr32
Ver | %WINDIR%\System32\Find "Version 6." > NUL
IF NOT ERRORLEVEL 1 (
  rem Windows Vista, Server 2008?
  Echo args="": For Each a in WScript.Arguments: args = args ^& """" ^& a ^& """ ": Next: CreateObject^("Shell.Application"^).ShellExecute "RegSvr32", args, "", "runas" > "%TEMP%\RegSvr32Elevated.vbs"
  Wscript //nologo "%TEMP%\RegSvr32Elevated.vbs" %*
  Del "%TEMP%\RegSvr32Elevated.vbs" 2> NUL
) Else (
  rem Windows NT4.0, 2000, XP, Sever 2003
  RegSvr32 %*
)
Goto :EOF

:End
CLS
