今回exeから別exe(or bat)を起動させる処理を作成しようとしているのですが、
呼び出した後(今回であればnotepad.exe)5秒程度砂時計マークがでる状態になるのです。(バッチでも同じ)
なにか原因があるのでしょうか。また、対処方があれば教えてください。
【前提】
・本体exeにウィンドウは必要なし
・バッチの場合はcmd.exeは非表示
【環境】
・XP SP2 でコンパイル。 bcc32 5.5.1 と VB6
・実行はXP SP2 とWin2000 双方で同様の結果
【ソース】
#include<windows.h>
int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance ,
PSTR lpCmdLine ,int nCmdShow ) {
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si,sizeof(si));
si.cb=sizeof(si);
CreateProcess(NULL,"notepad.exe",NULL,NULL,FALSE,CREATE_NO_WINDOW|NORMAL_PRIORITY_CLASS,
NULL,NULL,&si,&pi);
CloseHandle(pi.hThread);
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hProcess);
return 0;
}
No.2ベストアンサー
- 回答日時:
WaitForSingleObject(pi.hProcess,INFINITE);
とすると、ウィンドウを持ったプロセスの場合、起動したプロセスが終了するまで砂時計が表示されます。
今回のウィンドウなしでも砂時計が出る原因はちょっとわかりません。
VC20005では砂時計はでませんでしたので、コンパイル環境の問題かもしれませんね。
こうしてみてはどうでしょう?
while(WaitForSingleObject(pi.hProcess,0) == WAIT_TIMEOUT){
Sleep(100); // 適当な時間待たせます。
};
参考までに、GetExitCodeProcess(pi.hProcess,&exitCode); とすれば、起動したプロセスの終了コードを取得できます。
遅くなりましたがVC2003コンパイラにてコンパイルすると若干早くなりました。同じコードなのに・・・
今回は実験なのでこのままにしました^_^;
ありがとうございました。
No.3
- 回答日時:
>しかし呼び出し側のexe(ソース添付プログラム)が待ち状態になっているような感じです。
ああ、その問題ですか。
まんま、スレッド立ち上げてそっちから通知もらうようにしないと、本体プログラム待ちますよ。
参考URLをどうぞ。
参考URL:http://www.sm.rim.or.jp/~shishido/cprocess.html
No.1
- 回答日時:
プログラム的な事ではないのですが、コマンドラインや、ショートカットでも同じくらい時間掛かるのであれば、ファイルシステムのデフラグ等ですかね?
パス等が沢山指定されていて、フルパス書いてないとき等も、exeファイルを探すのに時間掛かったりします。
この回答への補足
回答ありがとうございます。
補足しますと今回のプログラムでは[notepad.exe]自体は開けます。
しかし呼び出し側のexe(ソース添付プログラム)が待ち状態になっているような感じです。
本ソースにはWindow表示をしていませんが、試しに行った場合、起動後枠が表示されnotepad.exe起動します。その後5秒後辺りに白く表示エリア?が表示されます。
WaitForSingleObject(pi.hProcess,INFINITE);
の使い方の問題かな?と推測しているのですが、マニュアルおよびネットのサンプルを見ても今ひとつ回答に繋がりません。
ご存知の方がいれば些細なことでも結構です。よろしくお願いします。
不足している情報があれば追加します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
「覚え間違い」を教えてください!
私はかなり長いこと「大団円」ということばを、たくさんの団員が祝ってくれるイメージで「大円団」だと間違えて覚えていました。
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
CreateProcessでの実行ファイルの操作について
C言語・C++・C#
-
VC++ で.bat起動
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETでDOSコマンドの複数実行
-
バッチファイル 特定ウインドウ...
-
ショートカットの作成とコピー
-
ExcelVBAにてアプリをタスクマ...
-
EXCELをバッチコマンドで...
-
c#でコマンドプロンプトを実行...
-
バッチファイルでの時間差実行
-
WSHで空白を含んだコマンドの指...
-
「.exe(fortranで作成したもの)...
-
stable diffusionのインストー...
-
バッチへ値を返す
-
exe間での引き値の受け取り方法
-
Shiftキーを押しながら起動
-
createprocessで起動させる別.e...
-
CreateProcessの制御について
-
複数の処理の終了を待ちたい
-
batファイルで立ち上げたaplを...
-
VB6のShell制御について
-
指定したアプリケーションをモ...
-
64bitのwindowsサーバーで32bit...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 特定ウインドウ...
-
EXCELをバッチコマンドで...
-
batファイルで立ち上げたaplを...
-
ExcelVBAにてアプリをタスクマ...
-
VB.NETでDOSコマンドの複数実行
-
ショートカットの作成とコピー
-
指定したアプリケーションをモ...
-
Shiftキーを押しながら起動
-
64bitのwindowsサーバーで32bit...
-
バッチファイルからftpを実行時...
-
exe間での引き値の受け取り方法
-
c#でコマンドプロンプトを実行...
-
VB.NETでコマンドプロンプトの操作
-
バッチへ値を返す
-
PL/SQLで作成したストア...
-
VBAからキャッシュを削除する方...
-
stable diffusionのインストー...
-
C#でMediaPlayerを立ち上げた後
-
バッチファイルでAPを終了さ...
-
ASPからのEXEファイル起動
おすすめ情報