前提・実現したいこと
CreateProcess()を使用して自作実行ファイル(exe形式)を実行させたいのですが、
CreateProcess()で設定した引数が欲しい形で渡ってこなくて困っています。
該当のソースコード
プログラム(抜粋) --------------------------------------------------------------------------------------------- STARTUPINFO s = {sizeof(s)}; PROCESS_INFORMATION p; ::CreateProcess(NULL, _T(""test.exe" "C:\""), NULL, NULL, FALSE, 0, NULL, NULL, &s, &p); ---------------------------------------------------------------------------------------------
CreateProcessの引数設定は、MSDNをもとに設定しています。
https://msdn.microsoft.com/ja-jp/library/cc429066.aspx
「lpCommandLine」の下記説明があります。
「コマンドラインのうち、最初の半角スペースで区切られたトークン
(最初の半角スペースより左側)がモジュール名を意味します。
長いファイル名の一部として半角スペースを使っている場合、
引用符を使ってファイル名を囲み、ファイル名の終了位置と引数の開始位置を明示してください
なので引数は、引用符(")で囲んでいます。
実行時にtest.exeをデバックでargvを確認すると、argv[1]の値が意図したものになりません。
argv[0]→「test.exe」(正)
argv[1]→「C:"」(誤)
「C:\」がきてほしいのですが、「C:"」となってしまいます。
どうも、CreateProcess実行時に引数設定時の「"C:""」の「"」の部分が
エスケープ文字と認識されて、「C:"」になっているように見えました。
CreateProcess実行時に引数設定時の「"C:""」をそのまま「C:\」として
渡すにはどうすればよいでしょうか?
対策をご教授お願いいたします。
追加情報
CreateProcessの引数設定を"C:"でなく、"C:\temp"は、正しい引数が渡ってきます。
最後尾が\だとこの現象が発生するみたいです・・・
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。