• 締切済み

EXEの起動について

プログラムの連続起動をバッチファイルで作成しています。 本体(A.EXE)を連続起動させるべくfor文でテキストファイルを読み込み引数を与えながら起動して、ということをしたいのですが、A.EXEは自動で終了するもののワケあって終了した状態を取得できません。 そこで監視(B.EXE)を実行してA.EXEの終了を待つプログラムを用意しました。 for文の中でA.EXE起動→5秒待ち→B.EXE起動(バッチは待ち状態)→A.EXE終了→B.EXE終了(バッチ待ち解除)→2回目のA.EXE起動…という流れを想定していますが、B.EXEが待ち状態にならずA.EXEが実行されてしまいます。 バッチの中身をコマンドプロンプトで実行するとB.EXEは待ち状態となるのですがバッチ実行すると待ち状態になりません。 なにが原因かわからず質問いたしました。 ご助力いただけると助かります。 以下はバッチ内容です(for文は除きます)。 ----------------- start C:\work\A.EXE timeout 5 start /w C:\work\B.EXE ----------------- よろしくお願いします。

みんなの回答

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

startコマンド使わずに書けばいいんじゃないですか? プロセスが終了するまでバッチファイルの実行は止まっているハズですが。 /wait付きとどこが違うのかは疑問…かなぁ。 それとも、a.exeは子プロセス起動して終了してしまうんですか? そういう状況では厳しいかも知れませが… b.exeからa.exeを起動させる。とかできませんかね? プロセスの親子関係とか列挙する方法は…あったかなぁ。 b.exeからa.exeを子プロセスとして起動して、a.exeが起動した子プロセス(b.exeから見て孫プロセス)の終了状態も監視。 a.exeプロセスの孫プロセス(b.exeから見てひ孫プロセス)が起動されたら、その終了状態も監視……ってことになりますかね。 まぁ、a.exeがどういうモノなのか不明では手の打ちようがありませんが。 ウィンドウタイトルでの判定だと…場合によっては正しく判定できませんよ? # 列挙したときには別のウィンドウタイトルになっているかも知れない。 # オーナードローとかで本来のウィンドウタイトルとは別のモノが表示されているかも知れない。 # 別のバッチファイルやスケジュールで起動したモノかも知れない。

  • masatsan
  • ベストアンサー率15% (179/1159)
回答No.4

バッチで次に行っちゃう場合、AもBも起動したままなんですか? 特にBが。 バッチでBだけを(Aを監視しないようにして、Aが終わる程度の時間sleepさせて)回してどうなんだろう? これでも起きるならバッチの特性ということになっちゃいますねー、

  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.3

Windows Power Shell で必要な機能は実現出来ると思われますので調べてみて下さい。 (DOS コマンド cmd.exe の機能拡張版) windows power shell マイクロソフト 説明書 OR マニュアル  等でサーチ ==> http://technet.microsoft.com/ja-jp/scriptcenter/powershell_owner.aspx

  • nekokooko
  • ベストアンサー率4% (23/494)
回答No.2

時間を測るか・・単純にフォ ネキストでループで時間取るとか・・

nsdhrs67
質問者

補足

ありがとうございます。 時間での判定が厳しいためウインドウタイトルで終了判定となった経緯があり、即興でB.EXEを用意しました…。

  • masatsan
  • ベストアンサー率15% (179/1159)
回答No.1

start /w ? start /wait ? まだアイデアがわきませんが、Aの終了をどんな風に判断していますか? そのプロセスを監視しているということですか? 手動だと起動等で時間がかかるから、Aが起動しているけど、 バッチの場合待ち時間が短すぎてAが起動する前にBがおわっちゃっているとか。 5びょうもあれば十分ですか。。。。

nsdhrs67
質問者

補足

ありがとうございます。 A.EXEの終了判定はB.EXEでウインドウタイトルを取得しそのタイトルが消えたら、というものです。 5秒のウエイトでウインドウタイトルを取得するのには十分なはずなのですが…。

関連するQ&A

  • C#でのプログラム方法

    C#(コンソールでの実行ファイル)でのバッチファイル実行方法に悩んでいます。 実行イメージとして **************************************** 1. C#(A.exe)をダブルクリックで起動する 2. C#プログラム[A]はバッチファイルを起動する 3. C#(B.exe)をダブルクリックで起動する 4. C#プログラム[B]は2で起動したバッチファイルを終了させる(=DOS窓をCloseさせる?) **************************************** を考えています。 1~2の処理はなんとなくわかったのですが 4にてバッチファイルが起動しているDOS窓をどうCloseさせたらいいのかわかりません。 助けてください。

  • Shellコマンドで別のexeを起動するとフォーカスが別exeにいかない

    2本のEXE(AとB)があって、 AからBを呼び出して、Bの終了ボタンを 押すとAに戻るようなプログラムがあります。 Bを最前面にして起動しているのですが、 Bにフォーカスがいってくれません。 (Aに残ったままになっている?) ちなみにAもBもウィンドウスタイルは、 青いバーが出ている状態(動かせる状態)です。 Bが起動している間、Aはその後ろでまっている ようなイメージです。 どうやったらフォーカスを渡すことが できるでしょうか? <条件> Bのプログラムは修正することができません。 Aのプログラムは自由に修正できます。 どなたか教えて下さい。

  • タスクスケジューラでEXEが動かない

    教えて下さい。 あるEXE(VisualSutudiio2005でつくった)を、 タスクスケジューラで自動実行させようとしたのですがうまく動きません。 (スケジューラからバッチファイルを起動してバッチファイルないでEXEを起動しています) 正常に終了したかのうように終わってしまいます。 ※バッチファイルを普通に実行した場合は正常に動作します。 何が原因なのでしょうか? どうすれば自動実行できるようになるのでしょうか? よろしくお願い致します。

  • set.exeが起動してしまっています

    あるプログラムをautorunからインストールしようとしましたが、途中でフリーズしてしまいました。 そこでタスク・マネージャーで終了させました。 もう一度インストールしようとしましたが、「set.exeはすでに起動しています」と表示されて、受け付けてくれません。 そのset.exeを探しましたが、どこにあるのかも判りません。 コンピューターを再起動してみましたが、状況は変わりません。 おそらくスタート時のプログラムか何かに組み込まれてしまって、勝手に起動しているのではないかと思うのですが、どうしたらいいのでしょう? OSはWindows 7です。

  • 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); で起動しております。 また、実現不可能というお答えでもいいので教えていただければと思います。 お手数ですが何卒よろしくお願いします。

  • DOSのSTARTコマンドでEXEを呼び出したときのウィンドウ制御について

    お世話になります。 環境:WindowsVista 下記の様な構成のバッチファイルを作成し、実行したところ、 最終的に呼ばれているEXEのウィンドウが背面に隠れてしまいます。 <使用するファイル> バッチX バッチY 実行ファイルZ ( *.exe) <処理概要> 起動バッチを最新版に更新し、実行ファイルを起動する <処理の流れ> 1)バッチXをMouse-DblClickにて起動 2)バッチXにて、STARTコマンドでバッチYを呼び出す   →STARTコマンドを発行後にEXITコマンドを発行し、バッチX自身を終了 4)バッチYにて、STARTコマンドで実行ファイルZを呼び出す   →STARTコマンドを発行後にEXITコマンドを発行し、バッチY自身を終了 <問題> 上記(4)の時点で実行ファイルZが起動するのですが、  ・ウィンドウがアクティブにならない  ・Explorerなど他ウィンドウが有る時は、その背面として表示されてしまう。 という2点の問題があります。 <確認したこと> 単純に バッチ起動→実行ファイル呼び出し という、テスト用バッチを作って 実行したところ、上記のような問題はおこりませんでした。 推測するに、バッチを2段経由していることに拠ると考えています。 この辺りのウィンドウ制御についてご教授頂きたく、宜しくお願い致します。 佐藤

  • 複数の処理の終了を待ちたい

    お世話になります。以下、教えていただけますでしょうか? バッチファイル(A.bat)を作成しています。 そのなかで、a,b,c,dの複数のプログラムを、前処理の終了を待たずに起動させ、a,b,c,d全てが終了するのを待って、eというプログラムを実行させたいのです。 --------------- start a start b start c start d --------------- この記述で、a,b,c,dが一度に起動することは確認できました。 しかし、この後の、「a,b,c,d全ての終了を待ってeを起動させる方法」というのが分かりません。 教えていただけますでしょうか? それとも、そもそも、バッチでは実現不可能なのでしょうか?

  • バッチファイルでサブフォルダにあるexeを実行

    お世話になります。 バッチファイルをつかって サブフォルダにあるexeファイルの実行を 試みていますが、exeファイルの指定がうまくできず実行できないので、 ご教示いただけないでしょうか。 pushd %%0\.. でバッチファイル実行フォルダをカレントにしています。 バッチファイル実行ファイルがあるフォルダ000に サブフォルダA、そのなかにサブフォルダB、さらにその中にサブフォルダG1,G2,G3 があり、G1,G2,G3の中に、それぞれaaa.exeがあります。 フォルダ000のバッチファイルからaaa.exeを実行するために、 ファイルの指定をどのようにしたらよいかご教示いただけないでしょうか? よろしくお願いいたします。 フォルダ000  batファイル   フォルダA     フォルダB       フォルダG1          aaa.exe       フォルダG2          aaa.exe       フォルダG3          aaa.exe バッチファイル内は、 forループで以下のようにしています。 for /L %%i in (2,1,3) do ( A\B\G%%i\aaa.exe )

  • バッチフィルで起動した別ウインドウを閉じるには

    バッチファイルの中から別のコマンドプロンプトを起動して そこでコマンドを実行した後、この別起動したコマンドプロンプト のウインドウを閉じるにはどのようにすればよいでしょうか。 例えば、以下のバッチファイルを コマンドプロンプト(ウインドウ1)から実行すると もうひとつ別のコマンドプロンプト(ウインドウ2)が 起動してcopyコマンドが実行されますが 何分かしてコピーが終了して ウインドウ2はコマンド待ちの状態になりますが ウインドウ2は開いたままです。 この後、別のコマンドプロンプトを起動して 別の処理を行わせたいのですが その数だけ別ウインドウが表示されてしまいます。 ウインドウ2の処理が終わったらウインドウ2を閉じるには どのようにすればよいでしょうか。 (Windows7) ---test.bat------------ start copy /b c:\test1\test.exe c:\test2 -------------------------

  • CD-ROMからのEXEの起動について

    企業では悪意のあるプログラムを起動させないために、CD-ROMからのEXEファイルの起動をできないようなポリシーをかけているところが多いと思います。この場合、各種PR用のCD-ROM等CD-ROMを挿入するとメニュープログラムがオートスタートするものも起動できません。このようなCD-ROMを個別に閲覧可能とする方法はないでしょうか。例えばオートスタートするプログラム名を個別に指定して起動可能とするようにポリシーを都度変えることはできますが、たいていstart.exeなど簡易なプログラム名なので、プログラム名を詐称して他のプログラムを起動される可能性を考えるとセキュリティレベルが落ちるので採用したくないのですが。よろしくお願いします。

専門家に質問してみよう