WIN1@Codename

Codename

Windowsの中には32bit版と64bit版のPowerShellがあります

VBやC#から、System.Management.Automation.Runspacesクラスを使ってPowerShellのコマンドを実行することができます。

参考:Visual StudioとPowerShellの良い関係 for Hyper-V

このとき、VisualStudioで特に何も設定指定な場合、仕様として32bit版のPowerShellが呼び出されています。

PowerShell.exeはWindows内に実は二つ存在し、32bit版と64bit版とでそれぞれ異なります。

64bit版 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

32bit版 C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

どちらのPowerShellで動いているかを確認するには、コマンドプロンプトで [System.Environment]::Is64BitProcess と入力して、 Trueであれば64bit、Falseであれば32bitということになります。

PS > [System.Environment]::Is64BitProcess
True

VisualStudioでコンテナ関連のコマンドを呼び出していたとき、「コマンドが見つかりません。」とのエラーに遭遇しました。

このエラーはローカルのPowerShellに対してRunspaseを使って呼び出しを行うと発生して、リモートのPowerShellに対しては発生しないものです。

コンテナ関連のコマンドは、64bit版でのみ提供されているので、既定の設定でVisualStudioでコンパイルしたコードでは、32bit版のPwerShell.exeを呼び出してしまいエラーとなっていたのが原因です。

ローカルを呼び出す場合は32bitを、リモートは64bitという暗黙の設定がなされているようです。

回避方法としては、VisualStudioの方できっちりと対象のCPUを「AnyCPU」ではなく、「x64」でコンパイルしてください。

20161226050259

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://codename2010.blog11.fc2.com/tb.php/269-e372fcca
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad