• ベストアンサー

CreateProcessのコマンド・ライン文字列

■開発環境:VisualStudio2005 VC++ CreateProcessの第2引数についての質問なのですが、 第二引数は実行するコマンドライン文字列となりますが、この引数のサイズがある一定のサイズを超えるとCreateProcessの実行でエラーになります。 その場合のGetLastError()の番号は87=ERROR_INVALID_PARAMETERです。 どうも、CreateProcessの第2引数のサイズに上限があるように思います。 どなたこのあたりの情報を持っておられる方いますでしょうか? 以上、ご教授よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>どうも、CreateProcessの第2引数のサイズに上限があるように思います。 >どなたこのあたりの情報を持っておられる方いますでしょうか? http://msdn.microsoft.com/en-us/library/ms682425.aspx より >The command line to be executed. The maximum length of this string is 32,768 characters, including the Unicode terminating null character. If lpApplicationName is NULL, the module name portion of lpCommandLine is limited to MAX_PATH characters. となっています。 VS2005付属の日本語版の方のMSDNでは記述がカットされているようですが…。 こういう場合は英語のドキュメントにあたった方がよいです。

kuni-gogo
質問者

お礼

なるほど、まさにズバリな内容でありました。(32,768byteですか・・・) 大変参考になりました。 どうもありがとうございました。 m(__)m

関連するQ&A

  • CreateProcessのエラー

    Windows8でキーボードを任意に表示しようとしてCreateProcessでTabTip.exeを起動しようとするとエラーが出ます。 GetLastErrorでエラーコードを取得すると740が帰ってきますが、該当するコードがありません。 起動できるようにするために参考になるような情報がございましたらよろしくお願いいたします。 開発環境はVisual Stidio 2012でC++です。 ちなみにVC6ではエラーが出ずに起動できますが、任意に閉じることができません。

  • CreateProcess

    さっそくですが… <MS-DOS上で動作するEXE> test.exeを実行する    ↓ データ(文字列)を入力し,Enterを押すと 実行結果が表示されます。 ------------------------------------------- このようなtest.exeがある時, 1)test.txtにデータ(文字列)を入れておきます。 2)実行後,結果を入れるr.txtを作っておきます。 そこで,DOS上で↓このように動かしました。 C:\ ~ \ ~ >test.exe <test.txt >r.txt 以上のことを(環境:BorlandC++Builder6,Windows2000) API関数のCreateProcessを使って動かすことは 可能なのでしょうか??というのは, 現在,CreateProcessでtest.exeを 呼び出すことはできたのですが, どうしても" <test.txt >r.txt "という部分を 入れると引数が渡らないのです。 CreateProcessのpszApplicationNameやpszCommandLine 引数あたりでいろいろ試したのですが,できません。 もしCreateProcessで可能ならば どのようにすればよいのでしょうか?? あまり知識がなく,説明不足かもしれませんが どなたか分かる方がいらっしゃいましたら, 教えて下さい。よろしくお願いします。

  • .NET Frameworkでコマンドライン実行

    お世話になります。 VC++2008 C++/CLI .NET Framework 2.0以降を使用しています。 以前、VC++6.0でWin32 APIのCreateProcess()の第2引数に コマンドラインを設定し、使用していました。 今回、これを.NET Frameworkを使用して実装することになりました。 System.Diagnostics.ProcessクラスのStartメソッドが Win32APIのCreateProcess()に相当するらしいのですが、 ProcessクラスのStartInfoプロパティにはコマンドラインを 設定するような場所がありません(FileNameはあるんですけど)。 どのようにしたらコマンドラインを実行することができるのでしょうか。 ご存知の方、どうぞご教授ください。 よろしくお願いいたします。 #元のコードを実装したり、バッチファイルを作るのは #最後の手段なので、そうならないようにしたいです。

  • コマンドラインがわかりません!!

    (質問) (1)コマンドラインというのがわかりません。 (2)下の説明のところが全部わかりません。 よろしくおねがいします!! -------------------------------------------------- (説明) ファイルを処理するとき、ファイル名指定はコマンドラインから行うのが便利です。Javaではコマンドライン引数はmain( )メソッドの引数として次のように用意されています。 public static void main (String args[ ]) { ・・・・・ } このargs引数を使うと、コマンドラインから入力されたパラメーターを次のように取得できます。 最初のパラメーター文字列は0です。 args.length args[0] args[1] args [2]  ・  ・  ・

    • ベストアンサー
    • Java
  • コマンドライン引数

    1~10の整数のコマンドライン引数を受け取り、それと等しい英語及び受け取った引数の数を表示するプログラムを作りたいのですがわかりません。 引数がない場合、1~10以外の整数の場合はエラーメッセージを表示させてプログラムを終了するようにしたいです。 出力する英語の文字列は String 配列に格納するようにします。 実行結果です。 % java englishNum 2 3 1 Two Three One length : 3 % java EnglishNum No Parameter! % java EnglishNum 30 Only 1-10!

    • ベストアンサー
    • Java
  • 32bitアプリから64bitアプリのコマンドを実行する方法

    VC++6.0でWin32アプリを開発中ですが、 64bitOS(WindowsXPx64,Windows Vista x64)でCreateProcess()やShellExecute() などを使用してコマンドを実行したいのですが、その時に64bitモードでそのコマンドを 実行する必要があります何か方法はないでしょうか?  32bit用のアプリから64bitモードとしてコマンド実行することが目的です。   CreateProcessなどとは別の方法でも構いません。 よろしくお願い致します。

  • コマンドプロンプト(cmd.exe)を小さいフォントで起動したい

    コマンドプロンプト(cmd.exe)を小さいフォントを指定して起動したいのですが、そのフォントの指定方法がわかりません。ご存じのかたがおりましたら、教えて下さい。 コマンドプロンプトのショートカットで、フォントの指定欄があり、そこで小さいフォント(6×13等)を指定すれば、実現は可能ですが、その方法ですと、作業フォルダも、そのプロパティで指定したところになってしまいます。 やりたいことは、以下の通りです。 1.作業ディレクトリを、第1パラメータで受け取り、そこのディレクトリを作業ディレクトリとして、コマンドプロンプトを起動したい。 2.そのとき、小さいフォント(6×13)で、起動したい。 API(CreateProcess)を呼び出して、コマンドプロンプトの起動までは、出来たのですが、そのときに、フォントサイズを指定する方法がわかりません。(少なくとも、CreateProcessのパラメータにはフォントに関する指定はありませんでした) 実行環境は以下の通りです。 Windows2000 VC++2003

  • コマンドラインの長さに制限はある?

    Windowsでプログラムを実行する時に、コマンドライン引数を渡す事ができますよね。例えば「myprogram.exe」というプログラムを実行する時に、 myprogram /help と言う風に「/help」を付けると、この文字列がそのままWinMain関数の第三引数「LPSTR strCmdLine」に渡されます。 そこで質問ですが、このコマンドライン引数の長さに制限はあるのでしょうか?

  • createprocessで起動させる別.exeをモーダルで起動したい

    createprocessで起動させる別.exeをモーダルで起動したい お世話になります。 VC++6.0 MFCで開発しております。 現在A.exeのあるボタンを押すとcreateprocessでB.exeを起動させるようにしております。 B.exeを起動後、A.exeの画面表示をクリックするとA.exeがアクティブになるのです。 それを、B.exeが終了しないとA.exeがアクティブにならないように変更したいのですがどのようにすればよいでしょうか? 現状は PROCESS_INFORMATION pi; STARTUPINFO si; si.cb=sizeof(si); CreateProcess(実行EXEパス,コマンドライン,NULL,NULL,TRUE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi); で起動しております。 また、実現不可能というお答えでもいいので教えていただければと思います。 お手数ですが何卒よろしくお願いします。

  • CreateProcessでの実行ファイルの操作について

    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 ); よろしくお願いします。

専門家に質問してみよう