Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Installing on ARM64 shows an error that the AMD64 version of the DLL couldn't be registered #398

Open
kristibektashi opened this issue Dec 3, 2023 · 8 comments
Assignees
Labels
Milestone

Comments

@kristibektashi
Copy link

The AMD64 version of the DLL doesn't have to be registered at all if the ARM64EC version exists (and they might even conflict).
Screenshot 2023-12-03 080819

@GerbilSoft GerbilSoft self-assigned this Dec 3, 2023
@GerbilSoft GerbilSoft added the bug label Dec 3, 2023
@GerbilSoft GerbilSoft added this to the 2.3 milestone Dec 3, 2023
@GerbilSoft
Copy link
Owner

I don't have any ARM Windows machines so I can't test this myself, but I made an adjustment to the install program such that if Windows 11 is detected, it registers i386, arm64, and arm64ec instead of i386, amd64, and arm64.

Please try install.exe from this build once it completes: https://ci.appveyor.com/project/GerbilSoft/rom-properties/builds/48666841/job/wvlgruu7afne0ufx
(Copy it into the v2.2.1 release directory, since the AppVeyor build only has a single architecture.)

(Note that install.exe is always i386 for maximum compatibility, since all versions of Windows 10 on ARM support i386 emulation.)

@GerbilSoft GerbilSoft reopened this Dec 3, 2023
@kristibektashi
Copy link
Author

I don't have any ARM Windows machines so I can't test this myself, but I made an adjustment to the install program such that if Windows 11 is detected, it registers i386, arm64, and arm64ec instead of i386, amd64, and arm64.

Please try install.exe from this build once it completes: https://ci.appveyor.com/project/GerbilSoft/rom-properties/builds/48666841/job/wvlgruu7afne0ufx (Copy it into the v2.2.1 release directory, since the AppVeyor build only has a single architecture.)

(Note that install.exe is always i386 for maximum compatibility, since all versions of Windows 10 on ARM support i386 emulation.)

92393c3#commitcomment-134084953 (I made this comment before I saw your reply)

@GerbilSoft
Copy link
Owner

Checking again, it seems amd64 emulation was never actually part of Windows 10; it was only released for Windows 11. I'll rework that and post a new build momentarily.

https://blogs.windows.com/windows-insider/2020/12/10/introducing-x64-emulation-in-preview-for-windows-10-on-arm-pcs-to-the-windows-insider-program/

@GerbilSoft
Copy link
Owner

GerbilSoft commented Dec 3, 2023

With regards to ARM32 deprecation in build 25905: This page says ARM32 UWP applications are deprecated. It doesn't say anything specifically about ARM32 Win32 applications.

https://blogs.windows.com/windows-insider/2023/07/12/announcing-windows-11-insider-preview-build-25905/

GerbilSoft added a commit that referenced this issue Dec 3, 2023
…262 or later; for earlier versions, only arm64.

ARM64EC was added at the same time as general amd64 emulation in
Windows 11 build 21277 (actually 21262, a leaked build).

On Windows 10, don't register for either amd64 or arm64ec.

See #398: Installing on ARM64 shows an error that the AMD64 version
of the DLL couldn't be registered
Reported by @kristibektashi.
@GerbilSoft
Copy link
Owner

New build will be here: https://ci.appveyor.com/project/GerbilSoft/rom-properties/builds/48666950/job/4traenmdo9lai3ru

Note that it may take a while to actually build.

@kristibektashi
Copy link
Author

kristibektashi commented Dec 3, 2023

With regards to ARM32 deprecation in build 25905: This page says ARM32 UWP applications are deprecated. It doesn't say anything specifically about ARM32 Win32 applications.

https://blogs.windows.com/windows-insider/2023/07/12/announcing-windows-11-insider-preview-build-25905/

ARM32 Win32 apps were never officially supported by Microsoft, but nevertheless they can be compiled with Visual Studio and will still work fine on builds before 25905. And it has been confirmed that both UWP and Win32 app support has been removed for ARM32 in build 25905 despite the official changelog not mentioning it (I believe the sysarm32 folder doesn't exist anymore)

Edit: https://betawiki.net/wiki/Windows_11_build_25905#Miscellaneous

GerbilSoft added a commit that referenced this issue Dec 4, 2023
@GerbilSoft
Copy link
Owner

Updated: https://ci.appveyor.com/project/GerbilSoft/rom-properties/builds/48667998/job/8e83718i9wbswp1t

The 32-bit ARM DLL will no longer be registered on Win11 build 25905 and later.

...and now that I'm looking at it more closely, I'm pretty sure that code path is only hit if running on a 32-bit ARM build of Windows 10, so it's essentially a no-op. Probably should have it register the 32-bit ARM version on 64-bit ARM Windows 10, but I guess only if I receive a bug report, since I don't think many 32-bit Windows ARM applications are available in the first place.

GerbilSoft added a commit that referenced this issue Dec 4, 2023
…check to CPU_arm64.

If IsWow64Process2() returns 32-bit ARM, then that means it's running
on a 32-bit ARM system. There's no point in checking for Windows 11
because Windows 11 dropped support for 32-bit ARM CPUs.

In the CPU_arm64 path, check for Windows 11 build 25905, and if it's
found, don't register for 32-bit ARM.

See #398.
@GerbilSoft
Copy link
Owner

One more update: https://ci.appveyor.com/project/GerbilSoft/rom-properties/builds/48668072/job/w3524k0rwn0s00au

The previous commit didn't actually make sense because if IsWow64Process2() returns 32-bit ARM, that means it's running on a 32-bit ARM system, which isn't possible on Windows 11. (I believe Windows 10 does support this.)

Reworked the check for the CPU_arm64 path, along with adding 32-bit ARM registration if running on Win11 earlier than build 25905.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants