
Рассмотрим следующий скрипт 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, но я больше не могу это проверить.