The best approach to implement Help feature in Windows Desktop Application, below are the list of the options I have come across:
Ref: https://en.wikipedia.org/wiki/Microsoft_Compiled_HTML_Help#cite_note-2
- Microsoft Compiled HTML Help is a Microsoft proprietary online help format
- Can be Decompiled(Tools 7-Zip,Sumatra etc)
- Predecessor Microsoft WinHelp / Successor Microsoft Help 2
- Support Win 10
Ref: https://en.wikipedia.org/wiki/WinHelp
- .hlp Microsoft WinHelp is a proprietary format for online help files that can be displayed by the Microsoft Help browser winhelp.exe or winhlp32.exe. -decompile a WinHelp file into its source documents: HPJ, CNT, RTF, BMP, and SHG -WinHelp file opens in a separate window(The Help author can control whether the Help file stores the user's settings between sessions or always opens in the default size and position.)
- HAs Title, a row of Menu(File, Edit, Bookmark, Options, and Help) Typical buttons include Contents, Index, Back, and Print, along with << and >> buttons to browse through the file. Help authors can also create custom buttons to jump to specific topics or perform other actions. -End of support - The open-source version of winhlp32 from Wine also works on Windows 10. It is included as part of WineVDM.
Ref: https://en.wikipedia.org/wiki/Microsoft_Help_2
- Microsoft_Help_2 is a proprietary format for online help files, developed by Microsoft and first released in 2001 as a help system for Visual Studio .NET (2002) and MSDN Library. Microsoft Help 2.x is the help engine used in Microsoft Visual Studio 2002/2003/2005/2008 and Office 2007 and Office 2010
- Microsoft Help 2.x file has a ".hxs" extension
- An open-source "convertlit" tool can be used to decompile the hxs file.
Ref: https://en.wikipedia.org/wiki/Microsoft_Help_Viewer
- Microsoft Help Viewer (HV) is the offline help system (local help) developed by Microsoft that ships with Visual Studio 2010 and its associated MSDN Library.
All the above approaches have the limitation that the compiled Help file can be decompiled and further redistributed which I want to restrict. I want to allow access to the Knowledge-base to an only authorized users, and authorized users should also not be able to further copy or decompile the knowledge base and share it further with unauthorized users.
The short story - you cannot prevent decompiling, if you compile into WinHelp (.hlp), HTMLHelp (.chm), Help2 (.hxs) or Help Viewer files (.mshc).
Winhelp is about 30 years old and HTMLHelp about 23 years old! Please note, the decompiler for HTMLHelp (CHM files) is still an integrated part of the Windows 10 operating system.
You know Microsoft have created other help systems since WinHelp (.hlp) and HTML Help (.chm) but they are tied to various systems:
These formats are not fully disclosed and documented. They are to be regarded as Microsoft internal.
Some notes:
Depending on your requirements you could experiment with the following ideas:
EDIT:
Your first requirement "I want to allow access to the Knowledge-base to an only authorized users" can be solved by a web-based help. You often come across websites where you don't have free access to all the sections: to be able to view the contents in certain parts of the website you need to register and obtain a login and password to enter these restricted areas. A classic example is a company site, where access to the Members' Area is reserved for salespeople and partners to view help documents and price lists, or portals that require login access to contents that can be downloaded.
If you really want to create a structured application help for a software on Windows, including context-sensitive help, CHM is usually better. But even that has a learning curve.
Your second requirement ".. and authorized users should also not be able to further copy or decompile the knowledge base." can only be solved with a lot of effort. No idea - maybe encrypt/decrypt to memory stream and pass it to file stream.
Samples for Web-based help: