Определите 32-битную/64-битную версию с помощью скрипта PowerShell внутри Inno Setup

Определите 32-битную/64-битную версию с помощью скрипта PowerShell внутри Inno Setup

Рассмотрим следующий скрипт PowerShell:

[System.IntPtr]::Size
[Environment]::Is64BitProcess

Если я запускаю это непосредственно в PowerShell на 64-битной машине, то я правильно получаю

8
True

Но когда я помещаю это в самораспаковывающийся установщик с помощью Inno Setup (собранный на 32-битной машине), я всегда получаю:

4
False

Как убедиться, что PowerShell работает в 64-битном режиме на 64-битном компьютере (и в 32-битном режиме на 32-битном компьютере)?

Я также попытался выполнить пакетный файл, который вызывает скрипт PowerShell, предполагая, что система запустит PowerShell в режиме по умолчанию, но это тоже не сработало.

Я также попробовал iexpress для обертывания программы, та же проблема.

решение1

Если ваш установщик — 32-битное приложение, он всегда запустит 32-битный PowerShell. Даже используя полный путь:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

потому что перенаправитель файловой системы Windows изменит его наC:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

Чтобы запустить 64-битную версию PowerShell из 32-битного процесса, используйте:

C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe

на 32-битной машине та же команда должна по-прежнему выполнять 32-битную версию PowerShell, но я больше не могу это проверить.

Связанный контент