I have a 32-bit application that include a 32-bit shell extension dll that handles thumbnails and a few other shell extensions. I want to add a 64-bit version of that same dll to the mix to get the same thumbnails et al working in 64-bit Windows Explorer.
Can someone tell me (or point me to documentation) what the proper way is to do this? Here's what I've been using for the 32-bit dll. The RegistryValue line with [BINDIR] in the Value is the line that causes me trouble when I get to 64-bit. <DirectoryRef Id="BINDIR"> <Component Id="GSIShell" Guid="2EAEEF9B-7385-4d12-811C-68E26FB5E66D"> <File Id="GSIShellDLL" Source="$(var.TargetDir)GSI.Shell.dll" KeyPath="yes" Checksum="yes"/> <RegistryKey Root="HKCR" Key="CLSID\{5D1A01C2-BD6D-45c7-BC8E-C419E2F08B70}" Action="createAndRemoveOnUninstall"> <RegistryValue Type="string" Value="GszIconShlExt Class"/> <RegistryKey Key="InprocServer32" Action="createAndRemoveOnUninstall"> <RegistryValue Type="string" Value="[BINDIR]\gsi.shell.dll"/> <RegistryValue Type="string" Name="ThreadingModel" Value="Apartment"/> </RegistryKey> </RegistryKey> </Component> </DirectoryRef> [BINDIR] is defined earlier in the .wxs file as: <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="COMPANYDIR" Name="MyCompany"> <Directory Id="SOFTWAREDIR" Name="MyApplication"> <Directory Id="BINDIR" Name="Bin"/> </Directory> </Directory> </Directory> So on a 64-bit OS that installs the GSI.Shell.dll file into C:\Program Files (x86)\MyCompany\MyApplication\Bin, and the Registry key HKCR\Wow6432Node\CLSID\{5D1A01C2-BD6D-45c7-BC8E-C419E2F08B70}\InprocServ er32's value is "C:\Program Files (x86)\MyCompany\MyApplication\Bin\gsi.shell.dll". Then I add the 64-bit dll similarly. The file needs to be placed in the same bin folder as the 32-bit version, but I want to be editing the 64-bit portion of the Registry, so I add Win64="yes" to the Component. <DirectoryRef Id="BINDIR"> <Component Id="GSIShell64" Guid="2EAEEF9B-7385-4d12-811C-68E26FB5E66D" Win64="yes"> <File Id="GSIShell64DLL" Source="$(var.TargetDir)GSI.Shell64.dll" KeyPath="yes" Checksum="yes"/> <RegistryKey Root="HKCR" Key="CLSID\{5D1A01C2-BD6D-45c7-BC8E-C419E2F08B70}" Action="createAndRemoveOnUninstall"> <RegistryValue Type="string" Value="GszIconShlExt64 Class"/> <RegistryKey Key="InprocServer32" Action="createAndRemoveOnUninstall"> <RegistryValue Type="string" Value="[BINDIR]\gsi.shell64.dll"/> <RegistryValue Type="string" Name="ThreadingModel" Value="Apartment"/> </RegistryKey> </RegistryKey> </Component> </DirectoryRef> This gives me an error on the RegistryValue line with [BINDIR] in the Value: Error LGHT0204: ICE80: This 64BitCompnent GSIShell64 uses 32BitDirectory BINDIR. I've done a lot of googling and most responses are "you shouldn't be installing 64-bit dlls with a 32-bit app". But that's absolutely not true, as these dlls are used by the shell, not by my application. There must be other people with this same problem. What's the solution? Thanks for any help! Nate ------------------------------------------------------------------------------ Come build with us! The BlackBerry® Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9-12, 2009. Register now! http://p.sf.net/sfu/devconf _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users