0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

32ビットプロセスから、64ビット版Windows PowerShellを起動する

0
Posted at

まとめ

32ビットアプリケーションから、Windows PowerShellを起動することで、意図せず32ビット版のWindows PowerShellが起動してしまうことがある。

64ビット版Windows上で、32ビットプロセスからWindows PowerShellを起動する場合は、SysNative 経由にすることで 64ビット版を明示的に起動できる。

再現手順

  1. 32ビット版である、C:\Windows\SysWOW64\cmd.exe を直接起動する
  2. 以下のコマンドを実行する
> powershell -Command "[Environment]::Is64BitProcess"
False

[Environment]::Is64BitProcess は、現在起動している PowerShell プロセスが 64 ビットかどうか を返します。
そのため、32ビット版として起動している場合は False、64ビット版なら True になります。

64ビット版のWindows PowerShellを起動する

32ビットアプリケーションであっても、SysNative 経由で64ビット版のPowerShellを起動することができます。

  1. 32ビット版である、C:\Windows\SysWOW64\cmd.exe を直接起動する
  2. 以下のコマンドを実行する
> %SystemRoot%\SysNative\WindowsPowerShell\v1.0\powershell.exe -Command "[Environment]::Is64BitProcess"
True

このように実行することで、64ビット版のPowerShellが起動していることを確認できます。

注意点

ただし、64ビット版である、C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe を指定することでは、32ビットアプリケーションからは、意図せず32ビット版のPowerShellが起動してしまいます。

  1. 32ビット版である、C:\Windows\SysWOW64\cmd.exe を直接起動する
  2. 以下のコマンドを実行する
> C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "[Environment]::Is64BitProcess"
False

32ビットプロセスからの「System32」アクセスは、32ビット用システムフォルダー(通常は SysWOW64)へリダイレクトされてしまうからです。
そのため、このパスを指定しても、32ビット版のWindows PowerShellが起動してしまいます。

なお、SysNative は通常の実フォルダーではなく、32ビットプロセス向けに用意された特殊なエイリアスです。
そのため、エクスプローラーから直接アクセスすることはできません。

実際の利用場面

サーバー移行を実施しており、旧環境で動いていたPowerShellスクリプトを、新環境へ移行していました。

新環境では、WindowsOSのバージョン差分の影響もあり、事前処理を64ビット版のWindows PowerShellで実行する必要がありました。

元々、32ビットアプリケーションから呼ばれる処理であったため、意図せず32ビット版のWindows PowerShellが起動してしまい、事前処理がエラーとなってしまいました。

SysNative経由で、64ビット版のWindows PowerShellを起動することで、事前処理が正常に実行できるようになりました。

参考情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?