This is how you do it…
I’m going to write this like you’re somewhat of a newb, to make it easy of course.
Open Battlenet launcher
- Go to settings
- CTRL+C (copy) install directory
- Navigate to “App” (top left)
- Change ‘On Game Launch’ to “Exit Battle.net completely”
- Enable setting at very bottom – “Allow multiple instances of Battle.net”
- Click “Done”
Open Windows File Explorer (tip: ‘Win button + E’)
- In address bar, paste the path you copied and navigate to it
- By default it should be: “C:\Program Files (x86)\Diablo II Resurrected”
- Right click ‘Diablo II Resurrected Launcher.exe’
- Send to > Desktop (create shortcut)
- Rename this desktop shortcut to something unique. (EX: ‘1 – D2R Launcher.exe’)
- Go back to Diablo II Resurrected game folder (C:\Program Files (x86)\Diablo II Resurected) and copy the contents
- Create a folder somewhere, either on your C: drive, or on an external drive
- Name the folder “Diablo 2 Resurrected (2)” for you to recognize it
- Navigate to the new directory, and paste the game files, inside of it
- Now create a shortcut for this second D2R Launcher.
- Right click launcher.exe > Send to Desktop (create shortcut)
- Rename this desktop shortcut to something unique. EX: ‘2 – D2R Launcher.exe’
Congratulations, now you have two D2R directories! You wont be able to use both shortcuts without one last thing though…
###!!! Update, new method at bottom !!!###
Download a program called Process Explorer from Microsoft (Google: ‘process explorer’)
Click first link: “Process Explorer - Windows Sysinternals”
- Download it
- Extract Files somewhere easy, like your desktop or download folder
Launch the first d2r launcher shortcut you created on your desktop
- Login with an account
- Launch game
Now go launch the process explorer application as ADMINISTRATOR (press ‘Win+D’ to get to your desktop)
- Press ‘CTRL + F’ to filter and type ‘d2r’
- You should see ‘D2R.exe’
- Single click D2R.exe to highlight it and press CTRL+L. Observe the list below that pops up
- You need to find this exact line in that list of gibberish…
'\Sessions\2\BaseNamedObjects\DiabloII Check For Other Instances’ - Right click on that and press ‘Close Handle’
Now you can launch the second shortcut, login with a second account, and enjoy Diablo the way we used to growing up.**
##########################
NEW METHOD TO CLOSE HANDLE
##########################
I wrote a .bat file to close handle super easy. The .bat must be executed from the same folder containing handle64.exe.
LINK:
- drive.google.com/drive/folders/1ycE0izXis0ynD1kUv0TLjREdT5rr3RxW?usp=sharing
The .bat MUST be ran as administrator to close the d2r handle successfully. The raw code used is at the end of this post.
NOTE: You will have to close this handle every time you want to run multiple d2r instances.
Q: Can I play 2 characters on same account at the same time?
A: NO, YOU NEED TWO ACCOUNTS (unfortunately)
Q: Why is game not logging in on second account?
A: When you launch the first launcher, you must follow through to logging in completely in the first game instance. THEN login using the second launcher. By design, the launcher.exe only stores a single login instance at a time, which is the very last used login (from the bnet launcher). D2R must be opened to at least the character menu to be considered ‘logged in’ and ready to proceed to closing handle/logging in on another account.
RAW .BAT CODE TO CLOSE HANDLE
@echo off
setlocal EnableDelayedExpansion
:: RAN AS ADMINISTRATOR? CHECK/FIX IF NOT ::
:-------------------------------------
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo. &echo. &echo. &echo.
echo Run as admin to close handle.
echo Requesting privilages.... &echo.
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
FOR /F %%I in ('handle64 -p D2R.exe -a "DiabloII Check For Other Instances" -nobanner') do set STOP_FLAG=%%I
:: PRIMARY SCRIPT ::
:while
if %STOP_FLAG% == No (
mode con cols=51 lines=9 >nul
echo. & echo. & echo.
echo #######################################
echo ~ NO OPEN HANDLES ~
echo #######################################
echo. &echo.
goto :DONE
)
:: SET CONSOLE WINDOW SIZE ::
mode con cols=51 lines=16 >nul
:: SET PID/HEX VALUES FOR PROCESS HANDLE ::
FOR /F "tokens=2,3 delims=:" %%A in ('handle64 -p D2R.exe -a ^"DiabloII Check For Other Instances^"') do (
set pid=%%A
set hex=%%B
)
:: DEBUGGING OUTPUT ::
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo [ DEBUG INFO ]
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ & echo.
FOR /F "tokens=1" %%X in ("%pid%") do (
set pid=%%X
)
FOR /F "tokens=2" %%X in ("%hex%") do (
set hex=%%X
)
echo *.... STOP_FLAG: [ %STOP_FLAG% ]
echo *.......... PID: [ %pid% ]
echo *.......... HEX: [ %hex% ] &echo.
:: CLOSE HANDLE (suppressed output) ::
handle64 -p %pid% -c %hex% -y -nobanner >nul &echo.
FOR /F %%I in ('handle64 -p D2R.exe -a "DiabloII Check For Other Instances" -nobanner') do set STOP_FLAG=%%I & echo.
if %STOP_FLAG% == No (
echo #######################################
echo ~ Handle Closed ~
echo #######################################
echo. &echo.
goto :DONE
) else (
:: Theoretically this error should never be trigged, since admin privilages are taken care of at beginning of script. ::
echo!!!!.... ERROR: RE-RUN PROGRAM AS ADMINISTRATOR
)
)
:DONE
timeout /t 2 >nul
~~ The End ~~