システムコマンドを非表示の状態で実行するには?

解決


なかむら  2003-08-07 20:05:01  No: 51914

現在、INIファイルに記述されたコマンドを終了同期をとって実行させるツールを作成しています。

CreateProcess()で実行してWaitForSingleObject()で同期をとっています。
しかし、コマンドに「 copy c:\test.txt c:\test2.txt」といったようなシステムコマンドを記述された場合には CreateProcess()では実行できないため、その場合は、system()で実行しています。

そうすると、system()で実行した場合には必ずコマンドプロンプトの画面が表示されてしまうのです。
現在はこれを表示させたくながために、システムコマンドを実行するEXEを作成し、それを使ってCreateProcess()で実行しています。

ただ、EXEが2本構成になってしまうので、なんとか1本にできないものかと考えています。
どなたかよい案がありましたら教えていただければと思います。

よろしくお願いします。


YuO  2003-08-07 20:36:28  No: 51915

システムコマンドというのは,
コマンドインタプリタ(CMD.EXE or COMMAND.COM)の内部コマンドのことですか。

コマンドインタプリタごと起動してやればCreateProcessで実行できますよ。


なかむら  2003-08-07 21:08:59  No: 51916

そうです。

ただコマンドインタプリンタごと起動するとなると、OSの種類をみなきゃいけなくなりますよね…。
NT系はcmd.exe、95系はcommand.com でよいのでしょうか?


YuO  2003-08-07 22:33:40  No: 51917

ん?
環境変数ComSpecを調べれば一発です。


なかむら  2003-08-07 23:25:05  No: 51918

ありがとうございます。
ComSpecで取得できるのは知りませんでした。
おかげで無事に解決できました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加