[問題] 如何判斷執行檔目前狀態?

看板C_and_CPP作者 (哇哈哈)時間13年前 (2012/05/30 21:10), 編輯推噓1(1018)
留言19則, 4人參與, 最新討論串1/3 (看更多)
小弟我目前用Windows Form再寫視窗程式,之前有爬文過看到若要打開某執行檔有兩個 方式: 法1:先include windows.h,然後使用 system("start c:\\123.bat")即可打開某檔案 法2:直接用內部元件,System::Diagnostics::Process::Start("c:\\123.bat")亦可。 問題來了,我想要檢查123.bat檔目前是否為開啟狀態(因為有可能沒法順利執行 而hang在那邊),我想藉由狀態的判別來作接續動作,不知程式該如何寫? 法1或法2的延續都可以,請指教。 PS.一般來說我們都是直接開工作管理員來看程式是否存在在工作佇列中, 我想到這邊就卡住了XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.169.179.246 snk521:轉錄至看板 C_Sharp 05/31 05:11

05/31 06:25, , 1F
大概辦不到吧,123.bat 在工作管理員裡,實際上是由 cmd.exe
05/31 06:25, 1F

05/31 06:25, , 2F
執行該敘述,所以只會查到cmd.exe,查不到 123.bat
05/31 06:25, 2F

05/31 08:43, , 3F
.bat不是執行檔啊...............
05/31 08:43, 3F

05/31 08:52, , 4F
在bat檔開始執行的時候建一個暫時檔,執行結束就刪除
05/31 08:52, 4F

05/31 08:53, , 5F
執行這個bat前就檢查這個檔案存不存在
05/31 08:53, 5F

05/31 08:53, , 6F
這算是個簡單但可能會有問題的解決方式XD
05/31 08:53, 6F

05/31 09:23, , 7F
我的方法與james大差不多,在batch一開始就用
05/31 09:23, 7F

05/31 09:24, , 8F
「title xxxx」,然後 FindWindow(NULL,"xxxx")..
05/31 09:24, 8F

05/31 10:21, , 9F
system("start c:\\123.bat"); 不保證會立即跳出視窗
05/31 10:21, 9F

05/31 10:22, , 10F
如果在跳出視窗之前或視窗關閉之後 FindWindow 會找不到
05/31 10:22, 10F

05/31 10:29, , 11F
都忘了 linotwo 說的情況..
05/31 10:29, 11F

05/31 11:39, , 12F

05/31 11:44, , 13F
用 ShellExecuteEx 執行 cmd 來跑批次檔
05/31 11:44, 13F

05/31 11:44, , 14F
再用 WaitForSingleObject 判斷 cmd 的執行狀況
05/31 11:44, 14F

05/31 12:03, , 15F
問題是,原PO程式執行前的BAT沒關掉怎麼辦11
05/31 12:03, 15F

05/31 12:22, , 16F
可以設定 timeout 時間或在執行期間容許使用者強制中斷
05/31 12:22, 16F

05/31 12:49, , 17F
都忘了有 ShellExecutEx.. 推一個.
05/31 12:49, 17F

05/31 13:44, , 18F

05/31 13:45, , 19F
加上每 100ms 檢查使用者是否中斷,3000ms time out
05/31 13:45, 19F
文章代碼(AID): #1Fnep4rS (C_and_CPP)
文章代碼(AID): #1Fnep4rS (C_and_CPP)