作者snk521 (哇哈哈)
看板C_and_CPP
標題[問題]如何判斷執行檔目前狀態?
時間Thu May 31 05:10:25 2012
小弟我目前用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
→ EdisonX:大概辦不到吧,123.bat 在工作管理員裡,實際上是由 cmd.exe 05/31 06:25
→ EdisonX:執行該敘述,所以只會查到cmd.exe,查不到 123.bat 05/31 06:25
→ stupid0319:.bat不是執行檔啊............... 05/31 08:43
→ james732:在bat檔開始執行的時候建一個暫時檔,執行結束就刪除 05/31 08:52
→ james732:執行這個bat前就檢查這個檔案存不存在 05/31 08:53
→ james732:這算是個簡單但可能會有問題的解決方式XD 05/31 08:53
→ EdisonX:我的方法與james大差不多,在batch一開始就用 05/31 09:23
→ EdisonX:「title xxxx」,然後 FindWindow(NULL,"xxxx").. 05/31 09:24
→ linotwo:system("start c:\\123.bat"); 不保證會立即跳出視窗 05/31 10:21
→ linotwo:如果在跳出視窗之前或視窗關閉之後 FindWindow 會找不到 05/31 10:22
→ EdisonX:都忘了 linotwo 說的情況.. 05/31 10:29
→ linotwo:用 ShellExecuteEx 執行 cmd 來跑批次檔 05/31 11:44
→ linotwo:再用 WaitForSingleObject 判斷 cmd 的執行狀況 05/31 11:44
→ stupid0319:問題是,原PO程式執行前的BAT沒關掉怎麼辦11 05/31 12:03
→ linotwo:可以設定 timeout 時間或在執行期間容許使用者強制中斷 05/31 12:22
推 EdisonX:都忘了有 ShellExecutEx.. 推一個. 05/31 12:49
→ linotwo:加上每 100ms 檢查使用者是否中斷,3000ms time out 05/31 13:45