This took a while to find out, especially since MSDN doesn’t have this information. A kind soul on the Microsoft.Public.Management.MMC newsgroup pointed to the answer. His name is Larry Gillstrom. Thanks Larry!
Read on to see how this is done…
I’m just going to repost his answer below:
=======================================================
You need to create a native code resource DLL (minimal C++ dll with an RC
file) and put the resources for the About Box in there. Then add code to
your snapin to let the mmc client know where they are.
Inside your DLL rc file:
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDB_LOGO16 BITMAP “..\\AboutDll\\Resources\\icon16.bmp”
IDB_LOGO32 BITMAP “..\\AboutDll\\Resources\\icon32.bmp”
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
IDI_ABOUT_ICON ICON “..\\AboutDll\\Resources\\My.ico”
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDS_PRODUCT_NAME “Product name text for the About Box”
IDS_COMPANY “My company name or copyright information”
IDS_DESCRIPTION “My product’s description”
END
STRINGTABLE
BEGIN
IDS_VERSION “1.2.3.4″
END
Inside your DLL resource.h file:
#define IDS_PRODUCT_NAME 101
#define IDS_COMPANY 103
#define IDS_DESCRIPTION 104
#define IDB_LOGO32 105
#define IDB_LOGO16 106
#define IDI_ABOUT_ICON 107
#define IDS_VERSION 201
Inside your SnapIn:
/// <summary>
/// Resource DLL identifiers for the About Box.
/// </summary>
[
SnapInAboutAttribute("About.dll",
ApplicationBaseRelative = true,
DisplayNameId = 101,
VersionId = 201,
VendorId = 103,
DescriptionId = 104,
IconId = 107,
LargeFolderBitmapId = 105,
SmallFolderBitmapId = 106,
SmallFolderSelectedBitmapId = 106
)
]
There is a bug in the mmc that causes problems when you update your resource
DLL. The mmc client caches the string information in a Registry Key:
HKEY_USERS\S-1-5-21-1123561945-789336058-854245398-1004\Software\Microsoft\Windows\ShellNoRoam\MUICache
And it uses the strings in there from that point on even if you change them
in your resource DLL. The only way around this issue is to either delete the
relevant values under this key, or change the numeric ids of the resources
whenever you update them. I have reported this bug to Microsoft but have not
got a response yet.
Hope this helps
Larry