64ビットWindowsには、64ビットバージョンのquery.exe
しかないので、64ビットバージョンのコマンドインタープリタからのみ動作するように見えます。おそらくあなたのプログラムは32ビットアプリケーションとして構築されていると思われます。
最高の解決策は、可能であれば、まったく外に出てはならず、対応するAPIを直接使用することです。外部プログラムへのシェルリングは、UNIXでは一般的な方法ですが、Windowsではお勧めしません。
しかし、これは不可能な場合:
あなたが唯一、64ビットシステム上で実行する64ビットになるようにアプリケーションを変更する必要がある場合。
64ビットシステムと32ビットシステムの両方で実行する必要がある場合は、実行中のソートを把握し、実行時にそれに応じて動作する必要があります。これを行うには、IsWow64Process()API関数を使用します。
32ビット版のWindows(またはアプリケーションが64ビット版)の場合、質問で使用したコマンドは現状どおりに動作するはずです。あなたは、64ビットのWindows上で動作する32ビットアプリケーションをしている場合は、のようなもののように変更します。プロダクションコードで
system("c:\\windows\\sysnative\\query.exe user");
、あなたが使用して、例えば、実行時にWindowsディレクトリの場所を調べる必要がありますGetWindowsDirectory()API関数です。
Harryさん、ありがとう、私はc:\ windows \ system32から私のアプリケーションフォルダにquery.exeをコピーしようとしました。 – eyyah
あなたのコードが自分のシステムでのみ実行されるのなら、それは妥当な回避策です。私は第三者のシステムにとってそれが賢明だろうとは確信していません。 –
@eyyahはい、それは間違いなく解決策です。あなたは何をしていてもAPIを使わないのはなぜですか? –