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

解決


なかむら  2003-08-07 11:05:01  No: 51914  IP: [192.*.*.*]

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

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

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

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

よろしくお願いします。

編集 削除
YuO  2003-08-07 11:36:28  No: 51915  IP: [192.*.*.*]

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

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

編集 削除
なかむら  2003-08-07 12:08:59  No: 51916  IP: [192.*.*.*]

そうです。

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

編集 削除
YuO  2003-08-07 13:33:40  No: 51917  IP: [192.*.*.*]

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

編集 削除
なかむら  2003-08-07 14:25:05  No: 51918  IP: [192.*.*.*]

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

編集 削除