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
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
Hi Boris,
thanks for reporting this bug. I just fixed the script now.
cheers,
Chris
It works! Thank you!
Thank you, Chris, works perfectly!
One small tip.
Run this from a folder in the C:\ drive
If run form D:\ it fails.
Hi,
I’m not quite sure what you mean with “run from”? Can you please explain some more?
TIA!
Hi. Operations on winhlp32.exe are not allowed even if I am logged in with user with administrator privileges.
Hi,
it is important that the CMD-Window or Powershell-Window actually has admin privileges, being logged in with an account that has administrative rights is not enough.
Thanx Chris. Works very well.
If any access denied errors occure, remove older winhlp32.exe or winhlp32.mui files in system directories first.
This solved the problem but its kind of weird because the msu is not really expanded, at least in the current folder.
I overlooked the rd command in the script, it deletes the directory after expanding. That said, if you get errors, make sure the folder/path where you execute the script doesn’t contain any spaces. No need to manually delete the files.
Great job!! Thank you.
Awesome script! Thank you.
You’re welcome!
Thank you!
Hi, thanks a lot for your help, a little bugfix:
the lines:
copy %muidir% %SystemRoot%\%muilang%\winhlp32.exe.mui
copy %exedir% %SystemRoot%\winhlp32.exe
should be:
copy “%muidir%” %SystemRoot%\%muilang%\winhlp32.exe.mui
copy “%exedir%” %SystemRoot%\winhlp32.exe
note the ” for the source files, because if the path have spaces on it the file copy operation fails.
Regards from Colombia.
Hi there,
you’re right, the quotes were missing.
I’ll add them to the script.
Thanks for this finding!
Thank you! Works great
You’re welcome!
mam said to download the MSWlogo
Unable to install. Any tips please
You can’t directly install a MSU-File that is originally for Win 8. Just follow the instructions in the blog entry.
hi
Hi Chris, glad to discover this, I’d been looking at writing something. Thanks so much! Does this prevent windows update and file verification from changing back to the non-functional winhlp32.dll, or would a .bat file need to be run repeatedly as needed?
Hi Tom,
glad to help!
I never noticed that the system-file check reverts the changes, so maybe the files involved here are not handled by the verification at all?
Honestly, I did not try to force a verification yet but at least the changes seems to last even after doing a full-blown release-update of Windows.
Thanks so much! It is working fine so far, if it gets removed I have a good way to put it back. Very much appreciated, and well done.
Worked for me Chris, on a 64-bit W10 system. Now I can read the help files of good old NEC Win Pro antenna simulation sw again. Many thanks!
You’re welcome!