PDA

View Full Version : installshield versionNT64 and wow64 redirection option support ARM64 platform?



acedon
08-28-2018, 07:01 AM
Hello.

I created 32-bit installer file with installshield 2018.
There are two problems with running a 32-bit installer file(created) in a Windows ARM64 environment.

First, I can not get the VersionNT64 property value to determine if it is a 64-bit environment. I think I should be able to get the VersionNT64 property value in ARM64 environment too. What's the problem?
**- In Windows x64 environment, VersionNT64 property value exists. However, when running in a Windows ARM64 environment, the VersionNT64 property value does not exist and only the VersionNT value exists.

Second, the WOW64 redirection feature does not turn off in the Windows ARM64 environment.
To turn off the WOW64 redirection (file system, registry) function, we used the following method in the script.
* "REGDB_OPTIONS = REGDB_OPTIONS & ~ REGDB_OPTION_WOW64_64KEY;"
* "Disable (WOW64FSREDIRECTION);"
When above command used in script, it works fine in Windows X64 environment, but WOW64 redirection is not disabled in Windows ARM64 environment.

In summary, if you run the 32bit installer file in Windows x64 environment, the above two things will work normally. However, it will not work when running in Windows ARM64 environment. Why?

Is not InstallShield currently supporting the ARM64 environment?
Or can you tell me if I misunderstand or misconfigure something?

best regards
acedon

joshstechnij
10-03-2018, 12:28 AM
The docs for VersionNT64 seem to be clear that the property is not set for x86 installers running on ARM64 machines:

For compatibility reasons, the property is also undefined if the Template Summary property indicates the package is for 32-bit Intel systems and the operating system is a 64-bit architecture that is not Intel64 or x64 (such as ARM64).
VersionNT64 Property - https://docs.microsoft.com/en-us/windows/desktop/msi/versionnt64

In addition, since InstallShield is mostly built as x86 architecture binaries, the ARM64 version of the OS is going to lie to any code InstallShield has that calls into the system to query for what architecture the system is. The end result is x86 processes on ARM64 Windows appear as if they are running on a 32-bit Intel machine (x86), including most of InstallShield's design, build, and runtime code, as indicated in this Build 2018 session:
Windows 10 on ARM for developers - https://channel9.msdn.com/Events/Build/2018/BRK2438

InstallShield's 64-bit additions (for x64 architecture versions of Windows) were added at a time when ARM64 Windows did not exist, so this behavior is expected based on how the x86 emulation layer on ARM64 Windows is intended to function. I don't know what plans InstallShield has to support ARM64 going forward, especially if the platform fails to gain any appreciable traction.

The question remains in this case though, in this scenario installing an x86 application on ARM64 versions of Windows, what is the use case for needing to know that the target machine is ARM64 and to access the native registry (i.e. the ARM64 registry) on the machine (when it won't really be usable by the application)?

acedon
11-21-2018, 05:29 AM
Thank you for comment^^

What I want to do is make sure the installer is running in a 64-bit environment, not an ARM64 environment.

The use case is when I write the file installation path to the registry.
In case of x64 environment, i expected to enter the path to "C: \ Program Files".
But there is no VersionNT64 value(Whether or not the VersionNT64 property exists determines whether it is 64-bit or not.)
So I aware of the x86 environment and have written "C: \ Program Files (x86)".

Is there any way to know x64 enviroment instead of VersionNT64 property? when x86 application is running in an x64 enviroment.

best regards.



The docs for VersionNT64 seem to be clear that the property is not set for x86 installers running on ARM64 machines:

VersionNT64 Property - https://docs.microsoft.com/en-us/windows/desktop/msi/versionnt64

In addition, since InstallShield is mostly built as x86 architecture binaries, the ARM64 version of the OS is going to lie to any code InstallShield has that calls into the system to query for what architecture the system is. The end result is x86 processes on ARM64 Windows appear as if they are running on a 32-bit Intel machine (x86), including most of InstallShield's design, build, and runtime code, as indicated in this Build 2018 session:
Windows 10 on ARM for developers - https://channel9.msdn.com/Events/Build/2018/BRK2438

InstallShield's 64-bit additions (for x64 architecture versions of Windows) were added at a time when ARM64 Windows did not exist, so this behavior is expected based on how the x86 emulation layer on ARM64 Windows is intended to function. I don't know what plans InstallShield has to support ARM64 going forward, especially if the platform fails to gain any appreciable traction.

The question remains in this case though, in this scenario installing an x86 application on ARM64 versions of Windows, what is the use case for needing to know that the target machine is ARM64 and to access the native registry (i.e. the ARM64 registry) on the machine (when it won't really be usable by the application)?

acedon
11-21-2018, 05:31 AM
The docs for VersionNT64 seem to be clear that the property is not set for x86 installers running on ARM64 machines:

VersionNT64 Property - https://docs.microsoft.com/en-us/windows/desktop/msi/versionnt64

In addition, since InstallShield is mostly built as x86 architecture binaries, the ARM64 version of the OS is going to lie to any code InstallShield has that calls into the system to query for what architecture the system is. The end result is x86 processes on ARM64 Windows appear as if they are running on a 32-bit Intel machine (x86), including most of InstallShield's design, build, and runtime code, as indicated in this Build 2018 session:
Windows 10 on ARM for developers - https://channel9.msdn.com/Events/Build/2018/BRK2438

InstallShield's 64-bit additions (for x64 architecture versions of Windows) were added at a time when ARM64 Windows did not exist, so this behavior is expected based on how the x86 emulation layer on ARM64 Windows is intended to function. I don't know what plans InstallShield has to support ARM64 going forward, especially if the platform fails to gain any appreciable traction.

The question remains in this case though, in this scenario installing an x86 application on ARM64 versions of Windows, what is the use case for needing to know that the target machine is ARM64 and to access the native registry (i.e. the ARM64 registry) on the machine (when it won't really be usable by the application)?

Thank you for comment^^

What I want to do is make sure the installer is running in a 64-bit environment, not an ARM64 environment.

The use case is when I write the file installation path to the registry.
In case of x64 environment, i expected to enter the path to "C: \ Program Files".
But there is no VersionNT64 value(Whether or not the VersionNT64 property exists determines whether it is 64-bit or not.)
So I aware of the x86 environment and have written "C: \ Program Files (x86)".

Is there any way to know x64 enviroment instead of VersionNT64 property? when x86 application is running in an x64 enviroment.

best regards.

acedon
11-21-2018, 05:33 AM
To. joshstechnij

Thank you for comment^^

Secnario
1. I made installer for windwos x86.
2. When run the installer, get what kind of environment it is.(ex. x86, x64)
3. Previously, I was judged to be 64bit environment with VersionNT64 property.
4. But VersionNT64 property does not appear in Windows ARM 64bit environment.

If VersionNT64 is not available on ARM64, is there another way?
In fact, I think there must be another way.
Please Let me know.

Best Regrards,
acedon

acedon
11-21-2018, 05:35 AM
The docs for VersionNT64 seem to be clear that the property is not set for x86 installers running on ARM64 machines:

VersionNT64 Property - https://docs.microsoft.com/en-us/windows/desktop/msi/versionnt64

In addition, since InstallShield is mostly built as x86 architecture binaries, the ARM64 version of the OS is going to lie to any code InstallShield has that calls into the system to query for what architecture the system is. The end result is x86 processes on ARM64 Windows appear as if they are running on a 32-bit Intel machine (x86), including most of InstallShield's design, build, and runtime code, as indicated in this Build 2018 session:
Windows 10 on ARM for developers - https://channel9.msdn.com/Events/Build/2018/BRK2438

InstallShield's 64-bit additions (for x64 architecture versions of Windows) were added at a time when ARM64 Windows did not exist, so this behavior is expected based on how the x86 emulation layer on ARM64 Windows is intended to function. I don't know what plans InstallShield has to support ARM64 going forward, especially if the platform fails to gain any appreciable traction.

The question remains in this case though, in this scenario installing an x86 application on ARM64 versions of Windows, what is the use case for needing to know that the target machine is ARM64 and to access the native registry (i.e. the ARM64 registry) on the machine (when it won't really be usable by the application)?

Thank you for comment^^

What I want to do is make sure the installer is running in a 64-bit environment, not an ARM64 environment.

The use case is when I write the file installation path to the registry.
In case of x64 environment, i expected to enter the path to "C: \ Program Files".
But there is no VersionNT64 value(Whether or not the VersionNT64 property exists determines whether it is 64-bit or not.)
So I aware of the x86 environment and have written "C: \ Program Files (x86)".

Is there any way to know x64 enviroment instead of VersionNT64 property? when x86 application is running in an x64 enviroment.

best regards.
acedon