So are you saying I'd tell my users on 64-bit machines to use my "setup64.msi" 
file and my 32-bit users to use a "setup32.msi"?  Or that the main setup32.msi 
would call a setup64.msi to do the 64-bit part?

I haven't tried it, but I don't think either of those options will help.  
Remember, this is a 32-bit application, therefore it must be installed in the 
32-bit Program Files (x86) folder.  Despite Brant's question, I don't (yet) 
believe the 64-bit dll is supposed to be installed somewhere else.  So 
ultimately the 64-bit msi is going to be told to write a Registry value in the 
64-bit portion of the Registry but pointing to the 32-bit Program Files (x86) 
folder.  Ergo, same error.

Interestingly, I've accomplished what I'm trying to do using Wise with no 
problem.  I simply added the 64-bit dll to the same Bin folder as everything 
else, marked the component as 64-bit so the Registry values would be written to 
the 64-bit portion of the registry, and it works just fine.  So it does not 
seem to me to be a limitation or restriction of Windows Installer.


To clarify some things:
- The dll is being saved to disk just fine.  It's 64-bit and it's being put in 
the 32-bit Program Files folder, yes, but Windows Installer isn't complaining 
about that so I'm fine with it.
- The part that isn't working is just writing a value to the Registry.  It 
seems to me Windows Installer should let me write whatever I want.  I can write 
"foobar", I just can't write "[BINDIR]".  I could presumably hard-code it to 
"c:\program files (x86)\etc" and get no error, but of course that won't get me 
what I want.

Maybe I can avoid the problem by copying the BINDIR path to a local variable of 
some sort, so that Wix loses sight of the fact that it's a path, and just sees 
it as a string?


Ultimately though I'm trying to learn what's the "proper" Windows Installer 
solution to this problem.  A workaround would be nice, but a proper solution 
would be best.  How is a 32-bit application with a 64-bit shell extension 
*supposed* to register the extension?


Nate



-----Original Message-----
From: Pally Sandher [mailto:pally.sand...@iesve.com] 
Sent: Tuesday, 22 September 2009 11:04 AM
To: General discussion for Windows Installer XML toolset.
Subject: Re: [WiX-users] Installing 64-bit shell extension with a 32-bit app

WIN64DUALFOLDERS is I expect since the MSI is compiled as 32-bit.

Brant the solution is to have separate 32-bit and 64-bit MSI's. You can't make 
a "one-size fits all" package using Windows Installer.
 
Palbinder Sandher 
Software Deployment & IT Administrator
T: +44 (0) 141 945 8500 
F: +44 (0) 141 945 8501 

http://www.iesve.com 
**Design, Simulate + Innovate with the <Virtual Environment>**
Integrated Environmental Solutions Limited. Registered in Scotland No. SC151456 
Registered Office - Helix Building, West Of Scotland Science Park, Glasgow G20 
0SP
Email Disclaimer
 

-----Original Message-----
From: Brant Gurganus [mailto:br...@gurganus.name] 
Sent: 22 September 2009 17:48
To: General discussion for Windows Installer XML toolset.
Subject: Re: [WiX-users] Installing 64-bit shell extension with a 32-bit app

What is preventing you from installing it in the 64-bit program files where it 
is supposed to go?

Brant Gurganus
http://gurganus.name/brant



On Tue, Sep 22, 2009 at 12:14 PM, Nate Hekman <hek...@geo-slope.com> wrote:
> 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}\InprocSe
> rv
> 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&reg; 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&#45;12, 2009. Register now&#33;
http://p.sf.net/sfu/devconf
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

------------------------------------------------------------------------------
Come build with us! The BlackBerry&reg; 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&#45;12, 2009. Register now&#33;
http://p.sf.net/sfu/devconf
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to