Inno Setup 内の PowerShell スクリプトから 32 ビット/64 ビットを判別する

Inno Setup 内の PowerShell スクリプトから 32 ビット/64 ビットを判別する

次の PowerShell スクリプトを検討してください。

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

これを64ビットマシンのPowerShell内で直接実行すると、正しく取得されます。

8
True

しかし、これを Inno Setup (32 ビット マシン上に構築) を使用して自己解凍インストーラー内にラップすると、常に次のようになります。

4
False

64 ビット コンピューターの場合、PowerShell が 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

32 ビット プロセスから 64 ビット PowerShell を起動するには、次を使用します。

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

32 ビット マシンでは、同じコマンドで 32 ビット PowerShell を実行できるはずですが、これ以上テストすることはできません。

関連情報