Getting Winhlp32 work on Windows 10

If you came here directly, you probably already google’d quite a while to find a solution for the sad fact that Windows 10 lets you run many old apps, but without letting you use the included HLP-files. The problem itself is rather old, it already arose in Vista and all later Windows versions are affected by it.

After a lot of moaning from the customers base, Microsoft released some patches that fix the inablility to open *.hlp-files. Unfortunately there is no such solution for Windows 10 yet.

If you are impatient like me, you may want to try the following aproach. At least it fixed the issue for me:

  • Go to https://support.microsoft.com/en-us/kb/917607 an download the patch for Windows 8.1 matching your cpu’s architecture (32 or 64 bit).
  • Copy&Paste the code below to a text file and save it as „install.bat“ to the same location where you saved the patch.
  • Launch a CMD-window with admin rights (right-click on the start-symbol, then „command prompt (Administrator)“.
  • Navigate using „cd“ to the location where you saved both files.
  • Start „install.bat“ by typing the name and pressing enter.
  • Wait until the script has finished it’s work.
  • Be happy 😉

(Many thanks to spectologic for digging this out and to „Boris“ [see comments] for reporting a bug in my script)

 

Here’s the code for „install.bat“:
———————————————

@echo off

echo expanding msu...

for /f "delims=" %%i in ('dir /b Windows8.1-KB917607-*.msu') do set msufile=%%i
md ContentMSU
expand -F:* %msufile% ContentMSU >NUL
cd ContentMSU
md ContentCAB
expand -F:* Windows8.1-KB917607-*.cab ContentCAB >NUL
cd ContentCAB

echo getting MUI language string...

for /f "delims=" %%i in ('wmic os get MUILanguages ^| find "{"') do set muilang=%%i
for /f delims^=^"^ tokens^=2 %%i in ('echo %muilang%') do set muilang=%%i

echo getting architecture from filename...

echo.%msufile% | findstr /C:"x64" 1>nul
if errorlevel 1 (
set arch=x86
) ELSE (
set arch=amd64
)

echo finding correct files for MUI language...

for /f "delims=" %%i in ('dir /B winhlp32.exe.mui /s ^| find "%arch%" ^| find /i "%muilang%"') do set muidir=%%i
for /f "delims=" %%i in ('dir /B winhlp32.exe /s ^| find "%arch%"') do set exedir=%%i

echo replacing files in %windir%...

takeown /f "%SystemRoot%\%muilang%\winhlp32.exe.mui"
icacls "%SystemRoot%\%muilang%\winhlp32.exe.mui" /grant "%UserName%":F
ren %SystemRoot%\%muilang%\winhlp32.exe.mui winhlp32.exe.mui.w10
copy %muidir% %SystemRoot%\%muilang%\winhlp32.exe.mui

takeown /f "%SystemRoot%\winhlp32.exe"
icacls "%SystemRoot%\winhlp32.exe" /grant "%UserName%":F
ren %SystemRoot%\winhlp32.exe winhlp32.exe.w10
copy %exedir% %SystemRoot%\winhlp32.exe

echo cleaning up...

cd ..
cd ..
rd /s /q ContentMSU

echo done!

pause

3 Kommentare

  1. Boris

    Hello Chris,

    Thank you for posting(re-posting)this script.

    From reading the script there is perhaps one small change required:
    „copy %muidir% %SystemRoot%\de-de\winhlp32.exe.mui“
    to
    „copy %muidir% %SystemRoot%\%muilang%\winhlp32.exe.mui“

    Best Regards,
    Boris

    Antworten
    1. chris (Beitrag Autor)

      Hi Boris,

      thanks for reporting this bug. I just fixed the script now.

      cheers,
      Chris

      Antworten
  2. Piotr

    It works! Thank you!

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.