What happened to WinHelp?


Commenter winhelp (probably not his/her real name) wonders what happened to WinHelp.exe.

I don't know, but it turns out the answer was already known to the Internet. At the time the question was posted, the answer was already in the Wikipedia entry for Windows Help—it even had a citation!

The question does highlight another one of those no matter what you do, somebody will call you an idiot dilemmas. On the one side, we have "Windows is already so big, what's the harm in adding another megabyte to the size to add this feature that is rarely used, primarly by older applications, so that customers won't have to download it?" On the other side, we have "Windows is too big, why not get rid of the components that exist only for the benefit of older applications and make them optional downloads?"

What probably swung the pendulum to the remove it from the core product side is the fact that the Windows help file format is equivalent to an EXE. (I don't know this personally; I'm just reading the Wikipedia article.) If somebody can trick you into clicking on a rogue HLP file, they can run arbitrary code and take over your account. The underlying functionality is useful, because you can write help files with links like Click here to open the Options dialog, and clicking the link will actually open the Options dialog (by invoking some accompanying native code that calls whatever APIs are necessary to get that Options dialog to open).

WinHelp came from the days before the Internet, when HyperCard was the reigning champion for page-based information presentation. You didn't have to worry that double-clicking a file on a remote server might take over your computer because you couldn't contact remote servers in the first place! (And if you could, it was because you were on a local-area network where all the computers were operated by your co-workers or other people you trusted.)

As I recall, there are some help-file-based viruses out there, so the security aspect is not merely a theoretical discussion. Removing the attack surface from the default configuration reduces the value of the help file attack. (Historians may note that HyperCard also permitted execution of arbitrary native code attached to a HyperCard deck. There were also HyperCard viruses.)

But now that you mention WinHelp, I remember a story about the little pen-writing-in-book animation that appears when the help engine is "preparing Help file for first use" (whatever that means). I'll take that up tomorrow.

Comments (27)
  1. tsrblke says:

    Ah, hypercard viruses.  Clearly written for a day when all files were to be trusted.  They made us learn Hypercard in highschool, even though I'm not all that old (this was 2000, so we all had copies of powerpoint, but our computer teacher didn't want to upgrade).  The viruses weren't all to complex, hypercard allowed a file to write directly to the "home deck" (roughly the equivalent of a normal.dat template.  Then that in turn could write to all future files opened.  None of the viruses we had were all too dangerous (they mostly randomly exited hypercard.) but they were suprisingly resilent.

  2. Mike Caron says:

    The most interesting thing about this is that WinHelp is still included with Windows (at least, it exists on my installation of Windows 7).

  3. Syllopsium says:

    I might disagree with other design decisions, but this was clearly the right one. There are so few programs using winhelp, that it's no real bother to download the update to Vista/7.

    The ability to call DLLs was at the time completely awesome. At the time I thought OS/2 help system (IPF) was better, but that had the same issues. There was a method of reading and navigating documentation built using a properly defined standard. Furthermore, it was possible to render content directly into the window so your documentation/help could contain multimedia features.

    I suspect that the real reason for removing winhelp was not the incorporation of DLL functionality, but a more standard and growing technology (HTML) for later versions also able to use native HTML rendering built into Windows. At the time editors and translators capable of handling winhelp/IPF were somewhat more specialist, too.

    The DLLs, as far as I can remember, were shipped separately to the help file – by itself the help file was not an issue. Unfortunately, there was also more than one security hole in winhelp's successor so that may have coloured memories.

  4. David says:

    I still remember writing some DLL code to display a 32bit image (or a dithered version for those with crappier displays) inside a help file. Luckily I've long forgotten the implementation details!

  5. Wow! says:

    There is one thing I love of WinHelp and I hope never goes away.. the Black-Blue grandient which reminds me so much of Windows 3.0 setup.. (even if Setup was an horizontal gradient, WinHelp had a corner gradient). Should be seen with dithering for extra coolness :)

    The white text already disappeared though.

  6. Dan Bugglin says:

    I always thought I read somewhere that WinHelp was removed to discourage devs from developing for it, and to use HTML Help instead.

  7. Helpme says:

    Yeah but MS can make our lives easier by making a generic MSI installer that will install on any current and future OS and not lock the download to each OS so we are not at MS's mercy on availability of the WinHelp update each time a new OS comes out. And since the topic of help is on, please bring the dual pane navigation, Favorites and History features of XP Help to the Help in Windows vNext. Lastly, bring back the field level What's this button help based on HTML help. MS removed that too because it was based on WinHelp.

    [Discussing an obsolete help technology now brings all comments on help into scope? Maybe I should kill all future help topics too. -Raymond]
  8. Helpme says:

    Field level context sensitive help is related to WinHelp. I guess the other line about XP's Help and Support won't hurt so much if the help team or whatever team reads this blog post and gathers some feedback.

  9. Leo Davidson says:

    Removing it did cause a bit of hassles with a few programs for a while but it sounds like it was for the best and it's not exactly hard to convert things to the newer format.

    At the time it felt like the old format had been arbitrarily obsoleted but now it sounds like there were some good reasons & the problem was more lack of communication about why the old format was bad.

    (I wonder if that could've been solved by disabling code execution without breaking the ability to read the files? Maybe there are other reasons to want to be rid of them. It's water under the bridge, anyway.)

    @Mike Caron:

    If you just found WinHlp32.exe on your Windows 7 machine, but haven't installed WinHelp, the file you found is probably just the stub which, when run, tells you why WinHelp isn't available.

    If it's a 9.5KB winhlp32.exe (and the file's Properties -> Details -> File Description is "Windows Winhlp32 Stub") then you should get a message to that effect when you run it.

  10. Leo Davidson says:

    (When I say "lack of communication," I'm aware the information was probably out there somewhere, but it wasn't widely known & you had to go looking for it.)

  11. mikeb says:

    > Discussing an obsolete help technology now brings all comments on help into scope? <<

    I think that ADL/Koenig lookup allows this.

  12. JM says:

    the little pen-writing-in-book animation

    I just got hit by a wave of nostalgia. I'd never have thought it, but I miss that thing. Even if seeing it meant you were waiting for more useful stuff to happen. It was a really neat animation, with flipping pages and all.

  13. mikeb says:

    "I miss that thing"

    I don't – it came up as a result of asking the user something they can't answer (blogs.msdn.com/…/120193.aspx).

  14. cpdaniel says:

    @mikeb

    Mix in a little template argument deduction and I'm sure we can show it it's in-scope.

  15. Daniel Colascione says:

    Raymond, I love reading your blog. If random commentors can make you stop covering certain topics, I'd rather have you kill comments than kill the topics.

  16. John Muller says:

    I liked the bug I found in WinHelp that would break it for all apps until a reboot/task manager kill (basically leaving it running invisible in the background)

  17. Antonio Rodríguez says:

    I thought I read somewhere WinHelp source code was a heap of quick patches, because it wasn't well structured in the first place and passed by the hands of many developers after the original one left Microsoft. It was ultimately removed from Vista because it was a nest of security bugs, easily exploitable using crafted HLP files. The Wikipedia (en.wikipedia.org/…/Winhelp) has a citation that seems to confirm it: "WinHelp does not meet the code standards established for Vista. These standards include security, reliability, and performance. WinHelp is architected in such a way that we would have to rewrite it from the ground up to meet the Vista code standards. And that approach doesn't make sense given that we have two other Help systems in Vista."

    So, in fact, while HLP files don't actually contain binary code, it's safe to assume that at least some of the bugs are of the buffer overrun type, allowing an attacker to run binary code at the user's privilege level through an specially crafted HLP file. Of course, this is pure speculation, but I would be greatly surprised if it weren't true. And it would be a very good reason to remove an obsolete help system from an Internet Age OS.

  18. asdbsd says:

    > And since the topic of help is on

    Let me guess what happens next. Raymond: "I just deleted that story on help I promised to post tomorrow". The crowd: "FFFFUUUU". Helpme: *trollface*.

  19. Alexandre Grigoriev says:

    Now that we know why WinHelp was removed, I'm dying to know why Windows XP Help And Support was replaced by Vista Help.

    [I discussed this earlier this year. -Raymond]
  20. rsola says:

    More information about the removal of WinHelp from Windows Vista onwards can be found at the Microsoft Knowledge Base article 917607. It also includes links to download packages which reinstate the missing functionality if it is absolutely required.

    I cannot open Help files that require the Windows Help (WinHlp32.exe) program: support.microsoft.com/…/917607

  21. evan says:

    I'm actually really looking forward to the story about the help animation. I think I might sometimes learn more from the funny little cultural stories than I do from the explicit teaching articles.

  22. ulric says:

    I've never developed for WinHelp myself, however as a user I've always loved it.  I was so fast and the content was always beautiful and so small on disk.  I felt that there was a huge step back when when everything went to .chm.   Had the same feeling about InfoView and MSDN.

    The removal of WinHelp from did cause a bit of a panic in our company.  I know other companies simply ignored Vista so they didn't act immediately and just told users that vista wasn't supported.  In our case, all the context sensitive help (we had a lot) was broken for a version that overlapped with Vista, then we converted everything, which was costly, but we had a large help team at this pre-economic downturn.

    So, removal of winhelp, a definite kick in the balls that forced everyone to go .chm.  Now the trend seems to be is to move completely way from .chm into even larger pure html.

  23. Richard Russell says:

    I don't object to removing WinHelp if its replacement has equivalent functionality, but it doesn't.  Consider particularly Context Sensitive (popup) help; here are some ways in which HTML Help's popup functionality is inferior to WinHelp's:

    1. Formatting rules are very strange.  Whilst WinHelp will attempt to produce a sensibly-shaped window, HtmlHelp will sometimes produce a long narrow strip the full width of the screen.
    2. HtmlHelp popup windows don't position themselves to avoid overlapping the taskbar, with the result that the bottom of the window can be behind the taskbar and hence invisible (and of course it can't be moved by the user).

    3. With WinHelp you can right-click on the popup and either copy it to the clipboard or print it. HtmlHelp provides no similar facility.

    4. Even if you've specified a margin of several pixels in the HH_POPUP structure you don't necessarily get any margin if the popup meets the edge of the screen.

    Bottom line: HTML Help does not provide an acceptable replacement for WinHelp as far as popup Context Help windows are concerned.

  24. Alexandre Grigoriev says:

    >[I discussed this earlier this year. -Raymond]

    Um, I was asking why a working XP help system was replaced by something hardly useable. Want a list of all CMD commands? Find it in XP easily. Good luck in Vista with that. Many other examples. That's what happens when you replace keyword search with fulltext. It doesn't work well.

    [As I already noted, I discussed this earlier this year. Not sure what you're trying to accomplish here. -Raymond]
  25. Orca Fan says:

    @HelpMe

    "generic MSI installer that will install on any current and future OS"

    Harden the HECK up and use Orca to edit those old MSI install packages.

  26. Roland says:

    WinHelp may be history, but the infamous WinHelp hand mouse pointer is alive and well! Even Outlook 2010 uses the old WinHelp mouse pointer for hyperlinks in HTML-based mail messages. I wrote to the Office team that they replace this hand cursor resource with just LoadCursor(IDC_HAND), which would provide the nice Vista true color hand cursor with alpha channel shadow under Windows Vista/7, but the WinHelp hand cursor from 1993 is still the one for hyperlinks in Office 2010 RTM.

  27. gechurch says:

    @Alexandre

    I searched for "Commands". Result 8 was "Command line reference for IT Pros". It was still another 5 or so clicks before I got the a-z reference, and along the way it opened Technet in my browser. That was slightly annoying, but not hard.

    In the article Raymond has linked to twice he states he doesn't know why help technologies change so often. So I'm with Raymond… what are you trying to accomplish? If you really want an answer, go find the blog of someone on the help team and ask them. Otherwise stop trolling.

Comments are closed.