Distributing Windows 32bit and 64bit apps

How do you guys distribute Windows 32bit and 64bit versions of your app?
Separate setup.exe files for each? One distro for both? What do customers expect nowadays?

The usual case is to distirbute different setup.exe files: one for 32Bit and another for 64.

Wouldn’t it be possible scripting INNO-setup to distinguish if OS is 32- or 64-bit and install one or another myapp.exe ?

Yes, that’s pretty easy with using ‘Is64BitInstallMode’. This way you can make an Inno script that handles both 32bit and 64bit parts.
My question was if this is what Windows users expect - one setup.exe for both 32bit and 64bit.
Tomas says this is not the case.

It’s usually two separate setup files in my experience which I prefer. For example I don’t want a 64 bit version installed because my OS is 64 bit when the version I need of an app for example needs to talk to some 32 bit ODBC drivers. This is the situation I have with Navicat, although if have both 32 and 64 bit versions installed in this case but only the 32 bit version will talk to a legacy app. I prefer a choice.

My $0.02 worth :smiley:

I like having 2 choices…32 and 64 bit installs, just as PaulB described.

you can have installer detect 64-bit OS and than offer either 32 or 64 bit with one as default.
For 32-bit, it’s straight through.

Here is an example of working copy (names changes to protect the guilty) using InnoSetup. In this version the client opted to install the Windows Runtime libraries by hand rather than use the MS installer. I also use my own 64-bit icon since that’s not automatic in Xojo yet. It will install whatever is native to that computer so the end user doesn’t need to know anything.

[code]; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName “My App”
#define MyAppVersion “7.1.9.246”
#define MyAppPublisher “Some Company Inc.”
#define MyAppURL “http://www.example.com
#define MyAppExeName “My App.exe”

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{F415E93D-19C0-41A2-84FC-DA70F95873BF}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
AppCopyright = Copyright © 2010-2016 Some Company Inc.
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputDir=Z:\MyApp\Source\MyApp_Server\Distribution
OutputBaseFilename=MyAppServersetup
Compression=lzma
SolidCompression=yes

; “ArchitecturesInstallIn64BitMode=x64” requests that the install be
; done in “64-bit mode” on x64, meaning it should use the native
; 64-bit Program Files directory and the 64-bit view of the registry.
; On all other architectures it will install in “32-bit mode”.
ArchitecturesInstallIn64BitMode=x64
; Note: We don’t set ProcessorsAllowed because we want this
; installation to run on all architectures (including Itanium,
; since it’s capable of running 32-bit code too).

[Languages]
Name: “english”; MessagesFile: “compiler:Default.isl”
Name: “spanish”; MessagesFile: “compiler:Languages\Spanish.isl”

[Tasks]
Name: “desktopicon”; Description: “{cm:CreateDesktopIcon}”; GroupDescription: “{cm:AdditionalIcons}”; Flags: unchecked

[Files]
Source: “Z:\MyApp\Source\MyApp_Server\Builds - MyApp.xojo_project\Windows\MyAppServer\MyAppServer.exe”; DestDir: “{app}”; Flags: ignoreversion 32bit
Source: “Z:\MyApp\Source\MyApp_Server\Builds - MyApp.xojo_project\Windows\MyAppServer\MyAppServer Libs\"; DestDir: “{app}\MyAppServer Libs”; Flags: ignoreversion recursesubdirs createallsubdirs 32bit
Source: "Z:\MyApp\Source\MyApp_Server\Builds - MyApp.xojo_project\Windows\MyAppServer\MyAppServer Resources\
”; DestDir: “{app}\MyAppServer Resources”; Flags: ignoreversion recursesubdirs createallsubdirs 32bit
Source: “Z:\Windows Runtime\Files\x86\*”; DestDir: “{app}”; Flags: ignoreversion 32bit

;64-bit Files
Source: “Z:\MyApp\Source\MyApp_Server\Builds - MyApp.xojo_project\Windows 64 bit\MyAppServer\MyAppServer.exe”; DestDir: “{app}”; Check: IsWin64; Flags: ignoreversion 64bit
Source: “Z:\MyApp\Source\MyApp_Server\Builds - MyApp.xojo_project\Windows 64 bit\MyAppServer\msvcp120.dll”; DestDir: “{app}”; Check: IsWin64; Flags: ignoreversion 64bit
Source: “Z:\MyApp\Source\MyApp_Server\Builds - MyApp.xojo_project\Windows 64 bit\MyAppServer\msvcp140.dll”; DestDir: “{app}”; Check: IsWin64; Flags: ignoreversion 64bit
Source: “Z:\MyApp\Source\MyApp_Server\Builds - MyApp.xojo_project\Windows 64 bit\MyAppServer\msvcr120.dll”; DestDir: “{app}”; Check: IsWin64; Flags: ignoreversion 64bit
Source: “Z:\MyApp\Source\MyApp_Server\Builds - MyApp.xojo_project\Windows 64 bit\MyAppServer\vccorlib140.dll”; DestDir: “{app}”; Check: IsWin64; Flags: ignoreversion 64bit
Source: “Z:\MyApp\Source\MyApp_Server\Builds - MyApp.xojo_project\Windows 64 bit\MyAppServer\vcruntime140.dll”; DestDir: “{app}”; Check: IsWin64; Flags: ignoreversion 64bit
Source: “Z:\MyApp\Source\MyApp_Server\Builds - MyApp.xojo_project\Windows 64 bit\MyAppServer\XojoGUIFramework64.dll”; DestDir: “{app}”; Check: IsWin64; Flags: ignoreversion 64bit
Source: “Z:\MyApp\Source\MyApp_Server\Builds - MyApp.xojo_project\Windows 64 bit\MyAppServer\MyAppServer Libs\"; DestDir: “{app}\MyAppServer Libs”; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs 64bit
Source: "Z:\MyApp\Source\MyApp_Server\Builds - MyApp.xojo_project\Windows 64 bit\MyAppServer\MyAppServer Resources\
”; DestDir: “{app}\MyAppServer Resources”; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs 64bit
Source: “Z:\Windows Runtime\Files\x64\*”; DestDir: “{app}”; Check: IsWin64; Flags: ignoreversion 64bit

[Icons]
Name: “{commonprograms}\{#MyAppName}”; Filename: “{app}\{#MyAppExeName}”; IconFilename: “{app}\MyAppServer Resources\AppIcon64.ico”
Name: “{commondesktop}\{#MyAppName}”; Filename: “{app}\{#MyAppExeName}”; Tasks: desktopicon; IconFilename: “{app}\MyAppServer Resources\AppIcon64.ico”

[Run]
Filename: “{app}\{#MyAppExeName}”; Description: “{cm:LaunchProgram,{#StringChange(MyAppName, ‘&’, ‘&&’)}}”; Flags: nowait postinstall skipifsilent

[/code]

OK I realize this is an old post but for the 64-bit DLLS like msvcr120.dll
you are just putting those into the app directory?
Do you have to “register” those DLLs?
Why do they not go into windows system area?

Finally moved to 64-bit and working on the installer for it…

The Visual C runtime stuff can be installed by a MS installer or you can use specific DLLs.

More information:

Sample Inno Setup scripts are included with Xojo:

  • Examples/Platform-Specific/Windows/Making Installers

Thanks Paul but is the Visual C runtimes the ones I see in the directory with the software application?
Orare the Visual C runtimes other files?

The files I see at the program exe folder are:
msvcp120.dll
msvcp140.dll
msvcr120.dll
vccorlib140.dll
vcruntime140.dll
XojoGUIFramework64.dll

I don’t use InnoSetup. I use SetupBuilder. When I install DLLs it asks whether to register them, etc.
Or do I just put the above dlls in the application folder and that’s it. i.e. I don’t have to register them

Dont install DLLs, Nor Install the “recomended” VC runtime. It will fail in some PCs.

Just use the “include runtime” option and to install, just copy all the files in the resulting folder.

Also, xojo apps are kind of bloated, so, having 32 and 64 options in a single installer is a huge waste of time and bandwith. It is better to have separate installers.

You do not have to register them. Put them in the exact same place that the build process puts them.

You know, some user know or care what OS they have. Combining them into one single installer and letting it decide isn’t that tough. We have a client that wanted just that - a single installer to rule them all.

Do you mean on Build select include runtime and then just copy over the files that result…

Or do you mean in SetupBuilder which has an option to install various MS runtimes…