
今回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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETでDOSコマンドの複数実行
-
バッチファイル 特定ウインドウ...
-
Shiftキーを押しながら起動
-
BASP21 で 外部プログラムが実...
-
複数の処理の終了を待ちたい
-
xampp1.7.4のApacheが起動しない
-
DOS窓の非表示について
-
EXCELをバッチコマンドで...
-
eclipseのエラーに関する質問で...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトのエラーに...
-
バッチでテキストファイルから...
-
#include <Windows.h>というヘ...
-
binファイルを解凍したいの...
-
.txtではなく.logの方が良いの...
-
win10の「フォト」で、「次へ」...
-
xcopyで特定のファイルのみをコ...
-
ExcelVBAのDirでスペース含むフ...
-
バッチ処理でファイルの中身を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 特定ウインドウ...
-
EXCELをバッチコマンドで...
-
ExcelVBAにてアプリをタスクマ...
-
UWSCについて
-
batファイルで立ち上げたaplを...
-
VB.NETでDOSコマンドの複数実行
-
c#でコマンドプロンプトを実行...
-
Shiftキーを押しながら起動
-
バッチへ値を返す
-
gccがコマンドプロンプト上で使...
-
CreateProcessの制御について
-
64bitのwindowsサーバーで32bit...
-
stable diffusionのインストー...
-
プログラムを実行すると、なぜ...
-
VB.NETでコマンドプロンプトの操作
-
Visual basic6.0からショートカ...
-
バッチファイルからftpを実行時...
-
ASPからのEXEファイル起動
-
パスの件
-
VBSでコマンドプロンプトのカレ...
おすすめ情報