2013-08-07 74 views
1

在Visual Basic中創建一個應用程序對象和進程啓動:的Visual Basic:殺死一個應用程序對象

gApp = New CANoe.Application 
gMeasurement = gApp.Measurement 
gApp.Open(arrArgs(0), False, False) 
gMeasurement.Start() 

一旦應用程序處理完數據兩種可能的情況可能發生:(i)該數據文件已損壞,並且(在正常情況下)會引發一個allert窗口,並且(ii)數據文件正常。在(ii)的情況下,我可以通過gApp.Quit()完成申請。但是,如果(i)gApp.Quit()不起作用,因爲程序需要用戶輸入(儘管通常我根本沒有看到窗口)。

問題1:我怎麼能挺過程對應gApp?目前,我以這種方式在quiting這樣的:

 For Each p As Process In Process.GetProcesses 
      If p.ProcessName = "CANoe32" Then 
       p.Kill() 
      End If 
     Next 

總的來說,這是一個糟糕的解決方案,因爲CANoe32的多個實例可以運行(雖然在這個特殊的情況下,該二進制文件的只有一個進程可以在系統上運行)。

問題2如果有子窗口,退出gApp會是更優雅的解決方案嗎?

任何意見,是非常有益的

+1

用戶),你唯一能做的就是殺死它(就像你在做的那樣)。關於子窗口,它們由外部程序本身管理,因此在主程序關閉時將被關閉。 – varocarbas

+0

@varocarbas:非常感謝評論。有多少個兒童窗戶可以檢查天氣有多困難?是否有可能得到'應用程序'的相應'進程'更好(沒有掃描整個系統進程列表?) – arthur

+0

這個問題不可能給出一個普遍的答案。如上所述,子窗口由目標應用程序及其行爲由其決定,只有當目標應用程序爲每個子窗口創建一個新進程(例如:打開了不同實例的Excel)時,纔可以通過進程管理子窗口;否則,只能訪問它們通過gApp(如果允許的話)。總之,對於這種類型的事情,你有兩種選擇:要麼在這個特定的應用程序中有經驗的人,要麼做一些試驗性的錯誤/測試。 – varocarbas

回答