VC++にて_spawnlpでプロセス起動

このQ&Aのポイント
  • Microsoft VisualC++で_spawnlpを使用してプロセスを起動する方法について質問します。
  • cTaskに登録されたEXEを起動させると、画面上には1つのコンソールしか表示されず、各EXEごとに10個のコンソールを表示させる方法を知りたいです。
  • タスクマネージャで確認すると、全てのEXEは起動していますが、画面上のコンソールが1個にまとめられてしまいます。
回答を見る
  • ベストアンサー

VC++にて_spawnlpでプロセス起動

Microsoft VisualC++にて_spawnlpを使用してのプロセス起動について質問です。 環境 OS:WindowsXP MS-Visual C++ 6.0 ----------------------------------------------------------------- int i; char cTask[10][50]; //起動するexeのパス&ファイル名 if(i=0; i<10; i++) { /* プロセス起動 */ ret = _spawnlp(_P_NOWAIT,cTask[pno],cTask[pno],NULL); } ----------------------------------------------------------------- 上記プログラムでcTaskに登録されているEXEを起動させています。 cTaskに登録されているEXEは、どれもVC++にてコンソールアプリケーションとして作成しています。 ですので、エクスプローラにて単体で各EXEを起動させると、10個のコンソールが表示されます。 ですが、上記プログラムにてcTaskに登録されているEXEを起動させると、画面上には1個のコンソールしか表示されません。 タスクマネージャで確認すると、全てのEXEは起動していますので、画面上のコンソールが1個に纏められてしまいます。 各EXE毎に10個のコンソールを表示させるようにしたいのですが、どのようにすればよいのでしょうか? 上記プログラムもVC++のコンソールアプリケーションとして作成しました。

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

  • ベストアンサー
回答No.1

ShellExecute()やCreateProcess()は試しましたか。

hira123
質問者

お礼

回答ありがとうございました。 ShellExecuteでうまくいきました。

関連するQ&A

  • 常駐し他のプロセスの起動を取得する方法

    test.exeというプログラムを作ります。 実行すると特定のプロセスの起動を待ちます。 特定のプロセスをnotepad.exeとします。 メモ帳(notepad.exe)が起動されたらtest.exeは何かします。 例えばMessageBox()とかで何か表示します。 どうやればいいのでしょうか? ・特定のプロセスが起動するまで待つ ・起動を検知する というところを教えてください。 VC++です。MFC,ATLなどは使いません。 特にウインドウなどはいらないので数行でできてしまうのであれば winmain()からお願いします。

  • 起動中のプロセスについて

    OSを起動するといくつもプロセスが起動しますが、 その中でいくつか、知らないプロセスが起動しています。 CSRSS.EXE LSASS.EXE SMSS.EXE loadqm.exe 上記のプロセスはなんでしょうか? また、ウィルスと関係がありますか? 宜しくお願いします。

  • VCを通して出しか起動できません

    フリー版VC++2005でゲームを作成しています。 VCからF5でデバッグ起動すれば動作するのですが、 EXEファイルを直接起動した場合は即、いつもの「問題が発生したため…」 が表示されて止まります。 この様な場合の対処方法を教えてください。 OSはWindowsXpです。irrlicht 1.1というライブラリを使用していますのでプログラムのかなりの部分がブラックボックスです。 よろしくお願いします。

  • VC++で作成したプログラムが2重に実行される

     バージョンはVC++ 2010 Express SP1、OSはWin Vista 32bitです。例えばWin32コンソールアプリケーションのプロジェクトを作成し、以下のようなソースコードをビルドしたとします。 #include <iostream> #include <cstdlib> using namespace std; int main() { cout << "Hello, world!" << endl; system("PAUSE"); }  作成されたexeファイル(添付画像の1.exe)をダブルクリックで起動すると、画像のように2つのプロセスが開始され、1つのウィンドウが開きます。何かキーを押すとこのウィンドウが閉じるわけですが、その時、メモリ使用サイズの大きい方のプロセスが消え、小さい方のプロセスだけ残ります。そして、閉じたウィンドウと同じ"Hello, world!"と表示されたウィンドウがまた開きます。これを閉じるとプロセスも完全に終了します。  どうやら、同じプログラムが意図せず2重に実行されてしまうみたいなのです。Debugモードでも、Releaseモードでも、上記の例と全く異なるソースコードでも、Win32プロジェクトでも同様の現象が生じてしまいます。以前は1つのプロセスとしてプログラムが実行されていたのではなかったかと思うのですが、どの設定項目が影響してこの現象を生じてると考えられますか?あるいは、コンパイラが壊れてるのでしょうか(以前、VC++ 2008 Expressと共生させていたことがあります)?どうか皆様のお知恵をお貸しください。

  • VC++6の「プロセスへアタッチ」について

    VC++6(MFC無し)で作成したEXEを「プロセスへアタッチ」でデバッグをしたいのですが、通常のデバッグ実行時と同じようにソースを参照しながらのデバッグはできないのでしょうか? 現在、プロセスへアタッチを行うと新たにワークスペースは作成され、ソースがない状態でデバッグ中となってしまいます。

  • アプリケーション起動について

    ひろと申します。 クライアントからサーバの共有フォルダにある、他のアプリケーションを オプション付きで起動させるプログラムをVC++で作成したのですが、 クライアントがNTだとうまくいきません。 たとえば、サーバ上にあるapp.exeを「app.exe /i」のような感じで 起動すると、クライアントがwin98の場合はアプリケーションが 表示されるのですが、NTから起動させようとすると、 アプリケーションは表示されません。 また、オプションを外すとアプリケーションは NTでも表示されます。 APIは、WinExec,ShellExecuteEx,CreateProcessで試したのですが 同じ結果でした。 CreateProcess は以下のように設定してます。 ------------------------------------------------------------------ STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(STARTUPINFO)); ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWNORMAL; CreateProcess(NULL, "serverpath\\app.exe /i", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); プロセスの起動は成功していうようです。 クライアントがNTの場合、他に必要な設定があるのでしょうか? よろしくお願いします。

  • VC++2010で作ったアプリケーション

    最近VC++でアプリケーションを作りました。 VC++のMFCを使ってです。 簡単なカレンダーなのですが、・・・ そのカレンダーのプログラムをコンパイルするとexeファイルができ、 そのexeファイルをクリックすると、確かに起動し、アプリケーションを使うことができるのですが、 問題はここからで、 このファイル、自分のパソコン上では動くのですが、 ほかの人のパソコン上だと「コンポーネントが見つかりません、mfc100,dllが見つかりません」 とか言う警告が出てしまうのです。 なぜ他のパソコンでは起動できないのですか? もしかして、作ったアプリケーションは、exeファイルだけあってもだめなのでしょうか? よろしく願います。

  • Windows再起動の制御

    あるアプリケーションをVC6で作成中なのですが、 そのアプリケーションのプロセスの途中で Windowsを再起動し、再起動完了後に 続きのプログラムを走らせたいのですが、 何らかの方法で可能でしょうか? ちなみに、そのアプリケーションの実行環境は WindowsXP SP2です。

  • 【VC++6.0】外部exeを2つだけ起動させたいのですが・・・

    現在VC++6.0を使用して、外部exeを起動させようとしていますが、 なかなかうまくいきません。 詳しい方いましたら、具体例を踏まえて教えて頂けませんでしょうか?? (本当にお願いします。) (私自身、C言語はなんとなくわかっているつもり(学生レベルの下)  ですが、VC++になって現在更に混乱しています。) (返事はちょっと遅れますが、必ずしますのでお願いします。) ************************************************************** 【やりたいこと(例で紹介します)】 ・ボタンを押して、1つのcalc.exeを立ち上げられるようにします。 ・更にボタンを押せば、calc.exeが2つまで立ち上がることは許可します。(3つ以上はだめ) ・立ち上がっていたcalc.exeが一度終了し、更にボタンを押せば、  クリックの回数分上限2つまでcalc.exeを立ち上げます。 【条件】 ・2つまでcalc.exeが立ち上がっていれば、ボタンを押したことをカウントしないとします。 ・起動もとのVC++のプログラム上の他のボタンは有効とします。 ************************************************************** 私の環境: Windows XP proで、VC++6.0を利用してます。 希望: ・できれば、Shellexecuteを使いたいです。 ・プロセスはあまり・・・(ネットで具体例をみましたが、全く使いこなせませんでした。) 以上、よろしくお願いします。

  • コンソールアプリケーションの終了方法

    コンソールアプリケーションをC言語(Visual-C++6.0)にて開発予定です。このアプリケーションは画面を使わないのでコンソールアプリケーションにする予定です。このプログラムは常駐プロセスにし、コマンドで起動停止を行うようにする予定です。プログラムの起動はバッチファイルを作成し、そこから実行しようと考えていますが、プログラムを停止させるバッチファイルのイメージがわきません。unixの場合は、当該プロセスにSIGTERMを送信する等の方法が考えられるのですが、windowsで常駐のコンソールアプリケーションを停止させるには、どのような方法があるのでしょうか。ご存じの方ありましたら、教えてください。停止させる方法は、外部から常駐プロセスに停止である旨の何らかの事象を送り、それを常駐プロセスがキャッチし、自ら停止することを想定しています。(有無をいわさず殺すことは考えていません) 実行環境:windows2003を想定 開発言語:VC++6.0でC言語