システム実行VIを使用するとコマンドが認識されない

更新しました Oct 13, 2023

使用製品

ソフトウェア

  • LabVIEW Full
  • LabVIEW Base

その他

  • Windows 64ビット版
  • LabVIEW 32ビット版

問題

System32フォルダにあるWindows実行ファイルをシステム実行VIで呼び出そうとしていますが、次のようなエラーが表示されます。
 

'C:\Windows\System32\msg.exe' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 



メモ: msg.exeは呼び出そうとしている他のプログラムに置き換えられているか、System32フォルダへのパスは異なる可能性があります。

コマンドプロンプトから同じコマンドを実行すると、問題なく動作します。Windows 64ビット版でLabVIEW 32ビット版を使用していますが、何か間違いはありますか?

解決策

問題は、Windowsが64ビットWindowsの32ビットシステムアプリケーションへの呼び出しを保存および指定する方法にあります。これらの32ビット版実行可能ファイルは、実際にはWindows\System32フォルダではなく、Windows\Sysnativeフォルダに含まれています。
 

LabVIEW 32ビット版は、Windows 64 ビット版環境ではWOWレイヤ上で実行されるため、32ビット名前空間のみにアクセスできます。システム実行VIがcmd.exeを呼び出すと、呼び出されるcmd.exeはオペレーティングシステムのビット数に依存し、この場合は64ビットバージョンとなります。これには、64ビットと32ビットの名前空間で置き換えが必要です。コマンドは、LabVIEW 32ビット版アプリケーションを通して呼び出されるため、Windows OSは32ビットアプリケーションから適切なリンクがおこなえず、64ビット版のコマンドプロンプトを通して32ビット実行となります。つまり、System32のパスを実行しても、SysWOW64にリダイレクトされています。
 

この問題を解決するには、システム実行VIに渡す文字列をWindows\System32のフォルダではなく、Windows\Sysnativeのフォルダを参照するように変更する必要があります。
 

エラーを返すか、または機能していない場合:


 

代わりに下記のように変更します。


メモ: 入力文字列の先頭にcmd /cを記載していない場合は、エラー 2: メモリが一杯ですというエラーが発生します。