MMM 0.6.7 Ready For Testing
New Version 0.6.7
As described earlier MMM version 0.6.7 is ready for testing and use. Download it here.
While I have put it through some extensive testing nobody else has taken a look at it yet so there may be serious imperfections. More importantly some application manifest XML changes have been made that might need further tweaking to avoid breaking cases that worked fine earlier. Please report any problems, and fall back to version 0.6.6 if necessary.
That may seem a little alarming, but everyone should keep in mind that MMM remains a work in progress. There has never yet been a "final release" version at any level of functionality. MMM remains in an extended beta testing state and this will continue until all planned features have been included and trials have concluded.
For most purposes though it should work just fine.
What is MMM?
For those of you joining us in progress...
Make My Manifest (or MMM) is a utility that was originally intended to make it easier to package Visual Basic 6.0 programs (EXEs) in a way that allows simplified deployment.
In Windows XP Microsoft supplemented the earlier "COM redirection" technique from earlier versions of Windows with a new side-by-side assembly technology. One aspect of SxS is that it allows the use of isolated asemblies and applications that can contain private copies of COM type information normally stored in the system registry. This enables something which is often called registration free COM because it allows many COM/ActiveX libraries to be deployed without registering them.
One advantage of reg-free COM is that you can deploy a program which uses a different version of a COM library than the one registered on a target system. This is not meant to be used to run foreign system components on a mismatched OS, but is used to let several programs co-exist on a system which may use different versions of some same application component or components. Most of the time this would be used with things like the "VB6 Extended Runtime components" (controls shipping with VB6 that you add to the toolbox), 3rd party component libraries, or your own OCX or DLL libraries that you create as part of an application.
Reg-free COM lets you create a VB6 EXE as an "XCopy deployment package" that does not require formal installation anymore on Windows XP and later operating systems.
Caveats
Note that this assumes you have tested with and can run using the VB6 runtime components that ship with versions of Windows. I have not worked out any way to isolate the VB6 runtimes yet, so such packages have to "survive" the bugs and limitations of older runtimes your users might have installed on their systems. The good news is that by the time Windows XP shipped the VB6 runtimes were reasonably stable. Subsequent XP service packs and newer versions of Windows ship with newer runtimes as well.
You must also be just as cautious as with the Packaging and Deployment Wizard or other tools to avoid trying to isolate and deploy things like system components or components that must be deployed as a suite (bits and pieces of IE, MDAC, etc.). MMM makes an effort to forcibly exclude such components where it can identify them, which makes the job easier for you. If MMM still picks up such components you can manually exclude them just as in the PDWizard. If you want to use installed/registered components instead of supplying isolated copies, manual exclusion works for this as well.
If your program uses late-bound COM libraries you can manually include these in the package, causing MMM to include the library and insert the necessary Type information in the application manifest. This of course does not apply to things like Office components, which must be formally installed and cannot be practically isolated for the most part.
ActiveX EXEs and DCOM in general require registration, limiting the benefit of MMM and reg-free COM when your application uses these things.
You can certainly use MMM and reg-free COM if your application is an ActiveX EXE in itself, however it will attempt to self-register on first use, which requires elevated privileges for that first run in order to avoid unexpected behavior. The ActiveX EXE won't be fully isolated (which would defeat the purpose of it being an ActiveX EXE in the first place) but it can use isolated components. The difference is that you can't simply delete the application folder or move it around on a machine without adjusting its registry entries.
Some VB6 controls cannot be properly isolated until XP SP2 with VB6 SP6 runtimes in place.
What Else Does MMM Offer?
MMM can include the necessary assembly selection entry for Windows Common Controls version 6.0, which use the Visual Styles introduced in Windows XP. Note that for this to work reliably your program requires a small amount of code to control the loading of this library, but this has been discussed in many places across the Web since Windows XP came out.
MMM can be used to specify a Vista trustInfo section in the application manifest. The presence of this entry signifies that your program is Vista aware on versions of Windows beginning with Vista and will bypass many AppCompat shims such as filesystem and registry virtualization. This section can also be used to request a non-default Execution Level, often done to force privilege elevation in Vista or later.
MMM can create an external manifest file for your application, or it can embed the manifest in your EXE as a resource.
You can also manually include non-COM DLLs in your program's package with the DLL location specified. This lets you place all of your program's COM and non-COM libraries into a dependencies subfolder. Normally the system DLL Search would not find standard DLLs in a subfolder.
New Stuff
You might want to explore a few links on topics related to new options in MMM. One of these is the dpiAware option and the other is the (Windows 7) Compatibility option.
Tutorial: Writing High-DPI Win32 Applications
Application Manifest (Windows 7)
- Posted at Sunday, June 7, 2009 10:52 AM
- In General Category | Permalink
- Name:
- E-Mail Address (optional):
- URL (nofollow, optional):
- Remember personal info
- Comments (text only):

I'm getting "Run-time error '76': Path not found" when running the build process.
Got this on 0.6.6. as well, but the error message and log file doesn't tell me what file is missing!
Posted by SBeard on Monday, June 8, 2009 08:04 AM
Could you email me the .LOG and .MMMP file along with just your .VBP file (if possible)? Also mention the OS you are building on?
More robust error reporting in MMM is high on the feature list for the next interim build. In the meantime I agree some errors leave us quite blind.
Posted by BVOCS on Monday, June 8, 2009 09:33 AM
In my manifest file near the top there is the line:
<assemblyIdentity name="None.KnowTheNotes" processorArchitecture="X86" type="win32" version="1.0.0.109" />
Where it gives the version as 1.0.0.109 I have simply overtyped this with 1.0.0.136 to account for the later version of my .exe. It doesn't seem to affect an existing installation! That is, I can happily run version 1.0.0.136 of KnowTheNotes.Exe on a system with its manifest still set to 1.0.0.109, therefore I don't have to re-issue the manifest. I have repeated this exercise once again, this time updating the version to 1.0.0.140 and that works as well with the original manifest. I envisage there will be quite a few further versions to come.
So is this part of the manifest purely advisory?
Posted by Mike Mitchell on Wednesday, June 10, 2009 03:39 AM
I suspect that a number of manifest attributes function basically as comments/remarks while others only apply for a registered side-by-side assembly installed as a global assembly. Still others might only apply when assemblies are cryptographically signed.
The published manifest schemas are old and incomplete, making it difficult to determine what is truly required.
Posted by BVOCS on Thursday, June 11, 2009 05:01 PM
can you put this function in your programm ?
Follow the link plz
Posted by Jeroen on Wednesday, June 17, 2009 07:47 PM
MMM is not a general purpose resource editor. I'm not sure why you would expect it to be.
The VB6 IDE already has a simple resource editor, and for anything complex you can use RC.EXE as that article states.
Posted by BVOCS on Thursday, June 18, 2009 12:23 PM