Saturday, February 25, 2012

Inno Setup, Part 4. x64 vs. x86.

By default Inno Setup always installs your application in 32-bit mode. But if your application is compiled to 64-bit binaries (at least, partly) you will, probably, want to use 64-bit mode. First thing you need to do is to specify ArchitecturesInstallIn64BitMode in [Setup] section:
[Setup]
ArchitecturesInstallIn64BitMode = x64
This means that under 64-bit processor architecture 64-bit mode will be used. You can specify Itanium architecture (ArchitecturesInstallIn64BitMode=ia64) if necessary.
Now imagine you need to use one file for 32-bit mode and another file for 64-bit mode. You can do it in the following way:
[Files]
Source: "OurProgram\Release\shellextension.dll"; DestDir: "{app}"; Flags: regserver ignoreversion; Check: not Is64BitInstallMode;
Source: "OurProgram\x64\Release\shellextension.dll"; DestDir: "{app}"; Flags: regserver ignoreversion; Check: Is64BitInstallMode; 
In the script above we specified to use 32-bit version of shell extension dll in 32-bit mode and 64-bit version of shell extension in 64-bit mode. Other files can be the same for 32-bit and 64-bit modes or different.
Also you can create completely different installers for different architectures. For example, to create installer specially for 64-bit architecture you need to specify:
[Setup]
ArchitecturesAllowed = x64
Other possible values are x86 or ia64. You can specify several values separated by spaces.

2 comments:

  1. Hi there,
    We are having a lot of trouble getting our shell extension to show up after install on x64 bit Windows OSes. (We use Inno Setup.) It's a context menu.

    For 32-bit, it updated the shell right away. Maybe you have insight? Will this solve the problem? Thanks!
    It's for an open-source project.

    ReplyDelete
  2. Hi Simon,

    Shell extension is not easy. Did you make sure you compiled two separate versions for 32-bit and 64-bit Windows and included them into installer?

    What language are you using for shell extension itself?

    ReplyDelete