The fundamental problem is that Heat, Tallow, and RegCap all have to run the
code that lives in the DllRegisterServer function. That code can do anything
at all. By convention it should simply write its own registry entries, and
ideally it should do that while requiring as few dependencies as possible.
However, many will fail in the environment that Heat and Tallow provide for
it (basically an empty HKEY_CLASSES_ROOT key).
If it is possible to work out what DllRegisterServer is doing by examining
the code, I would recommend you do that, and manually author the appropriate
<Class> and <Interface> elements (I recommend setting @Advertise to "no",
see Rob's blog post about advertising COM information at
http://robmensching.com/blog/archive/2007/03/12/RobMens-Recommendation-Do-no
t-advertise-COM-information-in-MSI.aspx). IMO this is better than relying on
the reverse-engineering.
Another possibility is to actually take before/after snapshots of
HKEY_CLASSES_ROOT and compare them - I'm not sure whether this is how RegCap
behaves, Heat and Tallow work by redirecting the HKEY_CLASSES_ROOT key to a
clean environment which doesn't touch the actual keys.
For the third-party components I would check with the authors how they
intend the software to be distributed. If they're not supplying a merge
module you will have to author the necessary data yourself and in this case,
if you can't reliably extract the necessary information, you'll have to fall
back on File/@SelfRegCost.
I haven't quite rationalized how to make WiX script the master source for
component registration information without having to actually build the
installer and install it for every debugging session. This would be the
ideal because you'd then only have to keep one source updated rather than
two.
--
Mike Dimmick
_____
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Carl Quirion
Sent: 11 May 2007 17:05
To: wix-users@lists.sourceforge.net
Subject: [WiX-users] Heat & Tallow not extracting all the nescessary
cominformation
Hi,
Heat (3) and Tallow (2) are not properly extracting register information
out of some DLLs/OCXs i have. Most are ok (the one made by the company i
work for) but some (made by 3rd parties) are not.
I suspect OCX/DLL compression to be the issue, but this is just a wild
guess.
Heat "goes thru" the files, but only produces "Interface" tags in the
TypeLib. Tallow, however, for some files works and some other crashes
Failed to SelfReg: ActBar.ocx
System.Reflection.TargetInvocationException : Exception has been thrown by
the target of an invocation. --->
System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT
E_FAIL has been returned from a call to a COM component.
at DllRegisterServer()
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[]
arguments, SignatureStruct& sig, MethodAttributes methodAttributes,
RuntimeTypeHandle typeOwner)
at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[]
arguments, Signature sig, MethodAttributes methodAttributes,
RuntimeTypeHandle typeOwner)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags
invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean
skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags
invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at
Microsoft.Tools.WindowsInstallerXml.Tools.Tallow.TallowMain.DynamicPInvoke
(String dll, String entryPoint, Type returnType, Type[] parameterTypes,
Object[] parameterValues)
at
Microsoft.Tools.WindowsInstallerXml.Tools.Tallow.TallowMain..ctor(String[]
args)
Here is one of the files on which i encounter this issue (for heat, tallow
works on this one) : http://downloads.datadynamics.com/AB2252121.zip
(ActBar2.ocx)
I could send anyone who is interested the file that cause the tallow crash,
i could not find it on the vendor's website, so i dont wanna infringe any
copyrights by making it publicly available
Would anyone have any idea about how to go and gatherer the proper infos or
know any other "Com info gatherer"?
To reproduce
Heat is used like this: Heat file ActBar2.ocx -out ActBar2.wxs
Tallow is used like this tallow.exe -s ActBar.ocx > ActBar.wxs
Thanks in advance
--
Carl Quirion
[EMAIL PROTECTED]
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users