COM extraction was originally created to be a tool for populating Windows Installer COM/registry table data without having to manually determine and populate data by hand from a given COM server. Over the years since COM extraction was first provided, InstallShield has updated COM extraction functionality to provide more accurate extraction and useful functionality.
A few customer reports of COM extraction hanging during build (IsRegSpy.exe does not exit) have come from InstallShield product support services. In nearly all of these cases, registering manually with regsvr32.exe resulted in a hung regsvr32 process. Upon further debugging of either IsRegSpy.exe or regsvr32.exe processes, the offending DLL was stuck in its DllMain function due to calling into another DLL or otherwise violating the system loader lock hierarchy. When authoring any in-process code (DLL, OCX, etc.) that is loaded through LoadLibrary, it is absolutely critical that all rules regarding what is safe or not safe to do in DllMain is respected. Issues with DllMain resulting in deadlocks are fairly common. If a DLL seems to be hanging when performing COM extraction, check to see if it also hangs with regsvr32.exe on the same or a similarly configured machine. If it does, attach a debugger to see if the DLL is stuck in its DllMain. Properly authoring a DllMain will avoid this type of behavior.
You can read more about COM extraction in a new white paper entitled “What Installation Authors Need to Know about COM Extraction.” This white paper provides an overview of how COM extraction works in InstallShield and gives installation authors information to make appropriate choices for COM servers as they design installations in InstallShield. The white paper also describes how to resolve common challenges that can occur when attempting to use COM extraction and reviews different dynamic extraction methods including API hooking, registry redirection, and kernel mode registry filtering.
See what’s new in the latest version of InstallShield, InstallShield 2013