dポイントプレゼントキャンペーン実施中!

VC++ 6.0 Win98

カレントディレクトリに実行ファイルをいれておいて、szCommand[]="eee"とすると(eeeは実行ファイルです。)実行してくれるのですが、相対パスや絶対パスを使うと実行をしてくれません。
CreateProcessでは、相対パスや絶対パスは使えないのでしょうか?
ちなみにコマンドラインから直接(相対パスや絶対パスを使用して)に打つと実行ファイルが動作します。

あと、リダイレクトも使えないのでしょうか?(動作しなかったので・・)

STARTUPINFO si;
ZeroMemory(&si,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESTDHANDLES;
si.hStdOutput=hFile;
si.hStdError=hFile;
char szCommand[]= "C:\\\"My Documents\"\\nannka\\VC++\\Ten3\\eee";

PROCESS_INFORMATION pi;
CreateProcess(
NULL,
szCommand,//コマンド
//NULL,
NULL,NULL,
TRUE, 0,
NULL,NULL,
&si,&pi
);


よろしくお願いします。

A 回答 (3件)

> もし、お時間がありましたら部分的に囲み方法ではダメなのか教えてもらえないでしょうか?



「*何故* ダメなのか?」ってこと?

想像でしかないですが、解釈する人が違うから、としか言いようが無いですね。

コマンドラインからの場合は、cmd.exe (もしくは Shell) が解釈している。CreateProcess の場合には違う人が解釈している、と。
    • good
    • 0
この回答へのお礼

もっと勉強して理解していこうと思います。

ありがとうございました。

お礼日時:2003/01/18 17:07

> 相対パスが使えないのはわかるのですが、絶対パスが使えないのがわかりません。



ああ、きちんと質問を読んでなかった。
私が最初に書いたのは、第一引数のことでした。これは NULL にできますね。

であれば、空白を含むディレクトリの扱いが良くないのでしょう。
ダブルクォートで、My Documents だけをくくるのではなく、コマンド全体をくくってください。

char szCommand[] = "\"c:\\My Documents ... \\eee\"";
    • good
    • 0
この回答へのお礼

出来ました!ありがとうございます。
でも、なぜ、My Documentsの部分だけではダメかわかりません。コマンドライン上だったら大丈夫なのに。。

szCommandの部分がコマンドライン上の命令と一致していると考えていたのですが、微妙に違うみたいですね。

もし、お時間がありましたら部分的に囲み方法ではダメなのか教えてもらえないでしょうか?

明日には締め切りたいと思います。
ありがとうございました。

お礼日時:2003/01/17 16:07

> CreateProcessでは、相対パスや絶対パスは使えないのでしょうか?



使えません。マニュアルに「フルパスで」と書いてありますね。

> あと、リダイレクトも使えないのでしょうか?(動作しなかったので・・)

">" を書いてもリダイレクトにはなりません。STARTUPINFO を利用します。

この回答への補足

回答ありがとうございます。

>使えません。マニュアルに「フルパスで」と書いてありますね。

相対パスが使えないのはわかるのですが、絶対パスが使えないのがわかりません。
フルパスは絶対パスのことじゃないんですか?

補足日時:2003/01/17 14:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!