DOpus doesn't install x64 version on Windows ARM in Parallels on Apple Silicon M1

1,119 views
Skip to first unread message

Ma Er

unread,
Apr 25, 2021, 9:40:42 PM4/25/21
to innosetup

Hello,
I would like to use Directory Opus which uses InnoSetup on my M1 Mac with Parallels and Windows ARM (insider). Windows ARM has x64 emulation and it works great, I have several x64 windows programs running. However the universal DOpus installer always wants to install x86. It works nicely, but I would very much prefer x64.

I would like to add that other universal installers all automatically chose x64, it was only DOpus with InnoSetup that didn't.

Directory Opus support answered that they "Inno Setup seems to need to be told what architectures to install the 64 bit files on in advance. We could tell it to do so on arm64 but as far as we know x64 support on ARM is still in beta so this would mean it wouldn't work for anyone who wasn't using the Insider build." I understand why DOpus programmers don't want to change it to x64 as a default at the moment, but couldn't InnoSetup provice a switch that will make the installer install x64 on windows ARM nonetheless?

Thank you!

References:
https://resource.dopus.com/t/dopus-doesnt-install-x64-version-on-windows-arm-in-parallels-on-apple-silicon-m1/38409/2

Gavin Lambert

unread,
Apr 25, 2021, 10:07:30 PM4/25/21
to inno...@googlegroups.com
On 26/04/2021 1:40 pm, Ma Er wrote:
> Directory Opus support answered that they "Inno Setup seems to need to
> be told what architectures to install the 64 bit files on in advance. We
> could tell it to do so on arm64 but as far as we know x64 support on ARM
> is still in beta so this would mean it wouldn't work for anyone who
> wasn't using the Insider build." I understand why DOpus programmers
> don't want to change it to x64 as a default at the moment, but couldn't
> InnoSetup provice a switch that will make the installer install x64 on
> windows ARM nonetheless?

At setup creation time, the authors of the script can choose which
architectures will install in 64-bit mode (and therefore, by omission,
which will install in 32-bit mode instead).

If an architecture is not listed in the 64-bit list, it is presumed to
be because the authors do not feel that it is appropriate to install the
64-bit version -- in this case, because it would then not work for most
people who don't have the experimental build of Windows.

But there can be other reasons, such as not having the appropriate
drivers or not having a 64-bit version in general -- the latter being
the most common, since most software doesn't really have any good reason
to be 64-bit.

As such it's not really a good idea to allow user overrides of this sort
of thing, as they may cause the app to misbehave, and would definitely
cause it to be installed in a different configuration than the authors
originally intended, which would complicate their support.

If they wanted to allow such a thing, they could make a custom installer
that does support it (and make both available until such time as they
decide to switch permanently) -- but as this again adds to their support
costs, you should understand why they may not wish to do so.

Ma Er

unread,
Apr 25, 2021, 11:54:09 PM4/25/21
to innosetup
Thank you a lot for your response!

It is curious though that other universal installers have installed applications as x64. I wonder if this means that either all of these applications won't work on non-insider ARM machines (improbable), or they have some other way of determining x64 compatibility and will install x64 on arm insider but not current arm final releases.

Of course creating and providing special installers (for every single new release!) that will allow x64 can't be expected.

But reading DOpus developers' reply (they are really cool people, I love their program and support depth), they do not seem to be against allowing the installation of DOpus as x64 on windows ARM. (Perhaps supporting a small 32bit version crowd is actually more work than supporting unlikely (?) x64 beta issues, especially since the latter is unsupported by definition anyway. Or perhaps they are actually interested in beta testers in the first place.) Instead, what they seem to say in their post is, that they just CANNOT do it because they are forced to make a choice between 32 bit or 64 bit once the installer detects ARM64.

What do you think of this: There could be an option for the authors of the script where they can allow (or by default disallow) a command line switch that overrides the architecture detection and enforces an x64 installation, including a warning (in the command line) that this is not supported by developers and is at the user's risk (confirm warning and continue y/n). This would ensure that only advanced users will do that, and it will leave control over the availability of that override in the hands of developers, and it would allow beta testing, as well as making x64 installs available to a rapidly increasing number of people who will want to use windows on their Apple Silicon Macs. Like I said, x64 emulation seems to work very well.

I am not a programmer, so I really hope I didn't make unreasonable suggestions or assumptions or otherwise say something unreasonable or that would be perceived as unreasonable expectations etc. !! It's just that I felt a bit lost because DOpus people seem (as I read it) to have no issue with x64 installations on ARM, and what's holding them back indeed seems to be the installer, if I am not mistaken.

Gavin Lambert

unread,
Apr 26, 2021, 1:11:44 AM4/26/21
to inno...@googlegroups.com, Martijn Laan
On 26/04/2021 3:54 pm, Ma Er wrote:
> What do you think of this: There could be an option for the authors of
> the script where they can allow (or by default disallow) a command line
> switch that overrides the architecture detection and enforces an x64
> installation, including a warning (in the command line) that this is not
> supported by developers and is at the user's risk (confirm warning and
> continue y/n). This would ensure that only advanced users will do that,
> and it will leave control over the availability of that override in the
> hands of developers, and it would allow beta testing, as well as making
> x64 installs available to a rapidly increasing number of people who will
> want to use windows on their Apple Silicon Macs. Like I said, x64
> emulation seems to work very well.

I still don't think making that a user choice makes much sense.

Possibly there is room to allow setup authors to make a more nuanced
decision (such as checking whether they're on a build that supports x64
emulation or not), e.g. by supporting code constants in the
ArchitecturesInstallIn64BitMode setting, or some other method that
allows a more custom decision than just checking the architecture.

It's not up to me, though. :)

Ma Er

unread,
Apr 26, 2021, 1:47:45 AM4/26/21
to innosetup
Thank you a lot for your answer, this was very helpful!!

Thank you for having taken the time.

Jordan Russell

unread,
Apr 29, 2021, 5:49:47 PM4/29/21
to innosetup
On Sunday, April 25, 2021 at 10:54:09 PM UTC-5 Ma Er wrote:
It is curious though that other universal installers have installed applications as x64. I wonder if this means that either all of these applications won't work on non-insider ARM machines (improbable), or they have some other way of determining x64 compatibility and will install x64 on arm insider but not current arm final releases.

My suspicion is that these other installers are using some older method of detecting the processor architecture (such as GetNativeSystemInfo), and that older method is returning a false "x64" result on this new ARM Insider build. Current versions of Inno Setup use the latest IsWow64Process2 API when available, which always returns a true "ARM64" result on ARM64 Windows.

To give us a better idea of how this new ARM Insider build identifies itself, could you compile and run the attached script on your ARM Insider VM? (I have no access to ARM hardware myself.)
When run, the script will show a message box similar to the following (note: it will take several seconds for the box to appear):

---------------------------
Setup
---------------------------
GetNativeSystemInfo arch: 9, type: 8664

Guest machine supported: 0x014C
---------------------------
OK   
---------------------------

Please post the text you see on your VM (press Ctrl+C to copy the message box's text to the clipboard).

I'm working on a plan to support x64-on-ARM64 properly (which involves introducing a new "x64compatible" architecture value that matches both x64 and x64-compatible versions of Windows), but it's not clear to me how to actually detect x64 compatibility on ARM64 Windows. Checking for ARM64 plus a specific Windows build number is not ideal because (a) version number checks break if Setup is run in compatibility mode, and (b) future architectures may include x64 compatibility too.

Example1-testarch.iss

Ma Er

unread,
May 3, 2021, 4:58:00 PM5/3/21
to innosetup
[Setup]
AppName=My Program
AppVersion=1.5
WizardStyle=modern
DefaultDirName={autopf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
Compression=lzma2
SolidCompression=yes
OutputDir=userdocs:Inno Setup Examples Output
PrivilegesRequired=lowest

[Code]
type
  TSystemInfo = record
    wProcessorArchitecture: Word;
    wReserved: Word;
    dwPageSize: DWORD;
    lpMinimumApplicationAddress: Cardinal;
    lpMaximumApplicationAddress: Cardinal;
    dwActiveProcessorMask: DWORD_PTR;
    dwNumberOfProcessors: DWORD;
    dwProcessorType: DWORD;
    dwAllocationGranularity: DWORD;
    wProcessorLevel: Word;
    wProcessorRevision: Word;
  end;

procedure GetNativeSystemInfo(var Info: TSystemInfo);
external 'GetNative...@kernel32.dll stdcall';
function IsWow64GuestMachineSupported(WowGuestMachine: Word; var MachineIsSupported: BOOL): Integer;
external 'IsWow64GuestMa...@kernel32.dll stdcall';

function InitializeSetup: Boolean;
var
  S: String;
  SysInfo: TSystemInfo;
  I: Integer;
  Supported: BOOL;
begin
  GetNativeSystemInfo(SysInfo);
  S := Format('GetNativeSystemInfo arch: %u, type: %u', [SysInfo.wProcessorArchitecture,
    SysInfo.dwProcessorType]);

  // Check all possible machine types
  for I := 0 to $FFFF do begin
    if IsWow64GuestMachineSupported(I, Supported) <> 0 then
      RaiseException('IsWow64GuestMachineSupported failed');
    if Supported then
      S := S + Format(#13#10'Guest machine supported: 0x%.4x', [I]);
  end;

  MsgBox(S, mbInformation, MB_OK);
  Result := False;
end;

Ma Er

unread,
May 3, 2021, 5:07:19 PM5/3/21
to innosetup
[23:06:28,444]   *** Setup started
[23:06:30,850]   Setup version: Inno Setup version 6.1.2
[23:06:30,850]   Original Setup EXE: \\Mac\Home\Documents\Inno Setup Examples Output\mysetup.exe
[23:06:30,850]   Setup command line: /SL5="$605F6,780800,780800,\\Mac\Home\Documents\Inno Setup Examples Output\mysetup.exe" /DEBUGWND=$20618
[23:06:30,865]   Compatibility mode: Yes (DetectorsShimLog)
[23:06:30,865]   Windows version: 10.0.21370  (NT platform: Yes)
[23:06:30,865]   64-bit Windows: Yes
[23:06:30,865]   Processor architecture: ARM64
[23:06:30,865]   User privileges: None
[23:06:30,865]   Administrative install mode: No
[23:06:30,865]   Install mode root key: HKEY_CURRENT_USER
[23:06:30,865]   64-bit install mode: No
[23:06:30,881]   Created temporary directory: C:\Users\MATTHI~1\AppData\Local\Temp\is-3V692.tmp
[23:06:30,881]   -- DLL function import --
[23:06:30,897]   Function name: GetNativeSystemInfo
[23:06:30,897]   DLL name: kernel32.dll
[23:06:30,897]   Dest DLL name: kernel32.dll
[23:06:30,897]   Importing the DLL function.
[23:06:30,897]   Successfully imported the DLL function. Delay loaded? No
[23:06:30,897]   -- DLL function import --
[23:06:30,897]   Function name: IsWow64GuestMachineSupported
[23:06:30,897]   DLL name: kernel32.dll
[23:06:30,897]   Dest DLL name: kernel32.dll
[23:06:30,897]   Importing the DLL function.
[23:06:30,897]   Successfully imported the DLL function. Delay loaded? No
[23:06:38,725]   Message box (OK):
    GetNativeSystemInfo arch: 9, type: 586
    Guest machine supported: 0x014C
    Guest machine supported: 0x01C4

Ma Er

unread,
May 3, 2021, 5:19:52 PM5/3/21
to innosetup


Hello,

sorry for my late reply; see above for the results!

The installed windows on ARM insider build is just a few days old.

If you need to do more testing on an ARM64 Windows system (with x64 emulation), you can send me instructions, or perhaps even use remote access.

I didn't run in any issues with x64 programs on ARM, but I did read that some programs tend to run into issues as a result of installing as 32bit under 64bit supporting systems (due to compatibility issues with associated 64bit-plugins or sth like that, I don't remember).

Ma Er

unread,
May 3, 2021, 5:21:44 PM5/3/21
to innosetup
no message box appeared when I right-clicked->compile, or when I ran it within innosetup.

Ma Er

unread,
May 3, 2021, 5:46:58 PM5/3/21
to innosetup
correction: the message box DID appear when running it fromwithin innosetup. It did NOT appear when I right-clicked--compile.

Jordan Russell

unread,
May 9, 2021, 4:46:25 PM5/9/21
to innosetup
On Monday, May 3, 2021 at 4:07:19 PM UTC-5 Ma Er wrote:
[23:06:38,725]   Message box (OK):
    GetNativeSystemInfo arch: 9, type: 586
    Guest machine supported: 0x014C
    Guest machine supported: 0x01C4

Thanks for testing.

This confirms that GetNativeSystemInfo is reporting the architecture as x64 now (9 = AMD64). So, although it seems pretty hacky to me, Setup could look for that false result as part of an x64 compatibility check.

The newer IsWow64GuestMachineSupported API seemed like a cleaner alternative, but apparently it only understands 32-bit machine types (x86 and ARM32). I had hoped to see "Guest machine supported: 0x8664".

Ma Er

unread,
May 14, 2021, 7:40:09 PM5/14/21
to innosetup
I mentioned "Guest machine supported: 0x8664" in the Microsoft Feedback hub, but from what I have read one cannot count on that being addressed by microsoft... Again, thank you for having looked into this and if you need access to windows on ARM with x64 support, perhaps I can be of help. Thank you for having considered implementing this in innosetup.

Ma Er

unread,
Jun 29, 2021, 9:04:04 PM6/29/21
to innosetup
(Just FYI, I was able to install Windows 11 on M1 / Parallels today and the results for the guest machine are still the same)

Ma Er

unread,
Sep 28, 2021, 9:39:06 PM9/28/21
to innosetup

Hello, according to software makers,  "ArchitecturesAllowed=x64 arm64" does not work to install x64 programs on Window 11 ARM64 Release Preview (in any case not on Apple Silicon). It will install 32bit instead. They say Inno is not detecting the system as arm64 for some reason. Since Windows 11 is about to be released to public very soon, may I ask if you could please look into this issue again?

Thank you a lot!!!
Message has been deleted
Message has been deleted
Message has been deleted

Jordan Russell

unread,
Oct 4, 2021, 5:45:40 PM10/4/21
to innosetup
I don't think Setup's ability to detect ARM64 is broken; the log you posted previously shows "Processor architecture: ARM64". To be sure, though, maybe you should test again on the latest Windows build.

ArchitecturesAllowed has no impact on what gets installed. It merely causes Setup to show an error message when run on an architecture that is not listed. In a dual-arch x86+x64 installer, ArchitecturesAllowed should be left unset.

If their installer is using "ArchitecturesInstallIn64BitMode=x64" together with "Check: Is64BitInstallMode" conditions on the x64 files, then that would explain why you aren't getting the x64 files: "x64" only matches true x64 Windows.

If they were to switch to "ArchitecturesInstallIn64BitMode=x64 arm64", then you should get the x64 files. Unfortunately, however, the x64 files would also be installed on older ARM64 builds that don't support x64 emulation, resulting in a non-functioning app.

At this time, the best workaround I can suggest is that they split their installer into separate 32-bit and 64-bit versions. The 32-bit version would leave ArchitecturesInstallIn64BitMode unset and always install the x86 files, while the 64-bit version would set it to "x64 arm64" and always install the x64 files. Users of older ARM64 Windows would download the 32-bit version.

I do still plan, though, to add official support for detecting x64 emulation in the near future. A new architecture identifier "x64compatible" will match both x64 Windows and ARM64 Windows with x64 emulation support, and an IsX64Compatible function will also be added. To encourage adoption of "x64compatible" so that more x64 apps can be installed on ARM64, the existing "x64" will be deprecated and renamed to "x64strict", and later on the compiler will print a warning when "x64" is used.

Albert Wiersch

unread,
Jan 30, 2023, 8:39:22 PM1/30/23
to innosetup

I just received an email from a customer who I think is running into this same issue with my application and I found this thread during a search.

This is over 1 year old now and I do not see support in Inno Setup for detecting x64 emulation. There does not seem to be "x64compatible"  or "x64strict" mentioned in the documentation.

Does this advice for the best workaround still apply?

Albert Wiersch

unread,
Jan 31, 2023, 3:03:42 PM1/31/23
to innosetup
*** UPDATE ***

For my 64-bit Inno Setup install I was using:
ArchitecturesInstallIn64BitMode=x64
ArchitecturesAllowed=x64


I changed the above to:
ArchitecturesInstallIn64BitMode=x64 arm64

And success! Customer reported that my app installed on his Windows 11 ARM system (which was a virtual machine running on an Apple MacBook Pro with M1 Apple silicon using Parallels 18).

Albert Wiersch

unread,
Jan 31, 2023, 3:18:14 PM1/31/23
to innosetup
ooops.... an update... I'll go ahead and also include (in my 64-bit installer):
ArchitecturesAllowed=x64 arm64

In order to prevent a 64-bit install on 32-bit Windows.

David Hollman

unread,
Jan 31, 2023, 3:22:33 PM1/31/23
to innosetup
The reason I haven't done the same as Albert was Jordan Russell's admonition that "Unfortunately, however, the x64 files would also be installed on older ARM64 builds that don't support x64 emulation, resulting in a non-functioning app."

Instead we have a 'special' installer which does no architecture checks, and we hand this out to customers on an as-needed basis (mainly for Mac users running Windows in a VM).

Toby Farrer

unread,
Mar 22, 2023, 4:57:28 PM3/22/23
to innosetup
Can I please have tha intaller for my parallels vm on my m1 MacBook Air.

Ma Er

unread,
Dec 3, 2023, 10:30:30 AM12/3/23
to innosetup
I'd like to draw attention to the problem again, could you PLEASE make it possible that x64 applications install on Windows 11 ARM? I've been waiting for a very long time (years) now... It's really a problem on Windows 11 VMs on Mac. Even Microsoft now officially allows Windows 11 ARM to be installed on Mac, Parallels even has a direct link to download the Win 11 installer. Let alone various Win 11 ARM64 laptops by Lenovo and others. It's a real problem. 

Ma Er

unread,
Dec 3, 2023, 10:31:48 AM12/3/23
to innosetup
It would suffice if for Windows 11, x64 would be allowed. The fringe cases where x64 emulation is available on Win 10 are irrelevant (only dev/beta channels, ages ago).

Martijn Laan

unread,
Apr 15, 2024, 2:26:05 AMApr 15
to innosetup
Hi,

I'm happy to report that this will be possible in the next version. Please see the test build at https://files.jrsoftware.org/is/dev/innosetup-6.3.0-dev.exe This build is not signed and also should not be used in production.

Very short summary for you is to replace x64 with x64compatible, and any IsX64 with IsX64Compatible but much more has changed, see the whatsnew file in Git at http://jrsoftware.github.io/issrc/whatsnew.htm and also the updated help file you will get after installation.

Don't know yet when the next version will be officially released.

Greetings,
Martijn & Jordan

Op zondag 3 december 2023 om 16:30:30 UTC+1 schreef Ma Er:

David Hollman

unread,
Apr 15, 2024, 9:41:57 AMApr 15
to innosetup
Great news, thanks!  This will simplify our installers and be easier for users who are Mac users 😁😁
Reply all
Reply to author
Forward
0 new messages