我想創建一個將運行兩個子進程的程序。現在,我希望當我的應用程序被任務管理器終止或崩潰時,它的兩個子進程應該會自動終止。我怎樣才能做到這一點?在VB6中創建子進程,當程序終止時自動終止
回答
在Windows你可以使用Job Objects - 在Linux中最接近處理組。只是研究API,它是兼容w/XP(可能是SP3)及以上。
你必須將你的VB6進程分配給一個工作,那麼你產生的每一個其他進程都隱含在這個工作中。請參閱Performing equivalent of 「Kill Process Tree」 in c++ on windows。
哇,真好。學到了新東西。謝謝! – Hrqls 2013-04-11 05:32:27
讓客戶檢查如果主機是使用FindWindow函數API
例如仍在運行:啓動計算器,運行下面的示例項目,並關閉計算器..在關閉計算器這個示例項目會關閉以及
'1 form with:
' 1 timer: name=Timer1
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub Form_Load()
With Timer1
.Interval = 100
.Enabled = True
End With 'Timer1
End Sub
Private Sub Timer1_Timer()
Dim hwnd As Long
hwnd = FindWindow(vbNullString, "Rekenmachine")
If hwnd = 0 Then Unload Me
End Sub
(Rekenmachine是Windows計算器的荷蘭名字,用自己的程序名稱代替)
可能是,我沒有寫清楚。但是,在我的問題中,條件是相反的。在你的例子中,當VB6程序終止時,我想讓計算器自動關閉。 – user2245523 2013-04-09 15:24:39
我認爲他建議在你的子進程中使用這個邏輯,假設他們也是你負責的vb代碼。然後,當你的主窗戶關閉時,孩子們會認識到這一點並關閉自己。 – Cemafor 2013-04-09 20:03:51
在想要關閉的窗口中使用此選項,並將「Rekenmachine」替換爲要跟隨狀態的窗口的標題。我認爲你有權訪問你想要自動關閉的進程的源代碼。 – Hrqls 2013-04-10 05:15:46
糾正我,如果我錯了:你有啓動其他2個處理(一個應用程序,它的你無法訪問源代碼),並且希望在應用程序結束時終止這兩個進程?
這可以在應用程序啓動一個額外的過程,監控應用程序的狀態,並採取關閉其它的2個進程
的照顧,例如粗糙的監控應用程序可能存在1個模塊來完成:
Option Explicit
Public pstrArg() As String
Private Sub Main()
pstrArg = Split(Command, " ")
Load frmMonitor
End Sub
該模塊加載它叫做frmMonitor與定時器控制形式:
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub Form_Load()
With Timer1
.Interval = 100
.Enabled = True
End With 'Timer1
End Sub
Private Sub Timer1_Timer()
Dim intIndex As Integer
If FindWindow(vbNullString, pstrArg(0)) = 0 Then
For intIndex = 1 To UBound(pstrArg)
TerminateProcess pstrArg(intIndex)
Next intIndex
End
End If
End Sub
Private Sub TerminateProcess(strName As String)
Dim Process As Object
For Each Process In GetObject("winmgmts:").ExecQuery("Select Name from Win32_Process Where Name = '" & strName & "'")
Process.Terminate
Next
End Sub
確保啓動FUNC您可以使用命令行參數對其進行調用
您可以對此進行如下測試: 將監控應用程序編譯到MonitorApp.exe中,並將其與現有的測試項目放在同一文件夾中名爲frmTest 1種形式:
'1 form with:
' 1 timer control: name=Timer1
' 1 command button : name=Command1
Option Explicit
Private Sub Command1_Click()
Shell "calc.exe"
End Sub
Private Sub Form_Load()
Shell App.Path & "\MonitorApp.exe frmTest calc.exe"
End Sub
這將您單擊命令按鈕 當您關閉該窗體每次啓動一個計算器,監控應用將關閉所有計算器,然後完成自己
是不是有任何替代方案,是否需要創建新的應用程序? – user2245523 2013-04-10 11:09:23
我不這麼認爲:因爲你想監視你自己的應用程序崩潰以及...如果你的應用程序崩潰,那麼你不能做任何事情......或者你必須知道它可能崩潰的地方,在這種情況下,你可能會做些什麼:) – Hrqls 2013-04-10 12:34:29
- 1. 父進程在C#中終止時如何終止子進程
- 2. 終止子進程
- 3. 進程自動終止
- 4. 當子進程終止時瞭解SIGCHLD
- 5. 從終端自動終止java進程
- 6. 當主進程被終止時,bash子進程不會被終止
- 7. 後臺進程在其父進程終止時被終止?
- 8. 程序終止時用`exec`終止進程
- 9. Python:在創建子進程後終止父進程
- 10. 子進程在出錯時終止
- 11. 子進程終止清理
- 12. Apache Ant:螞蟻進程終止時終止進程<exec>
- 13. 程序結束時未終止進程
- 14. 使用進程時程序不終止
- 15. 監控進程的創建和終止
- 16. 死鎖:創建(所有進程終止)
- 17. 當等待()結束時進程終止
- 18. 守護進程自動終止
- 19. 進程不終止
- 20. 終止進程 - AHK
- 21. WKWebView進程終止
- 22. 在C中,如果父進程終止,那麼子進程是否會自動終止?
- 23. 程序在文件移動時終止
- 24. 終止子流程
- 25. 如何在c#控制檯應用程序中止時終止子進程?
- 26. 當「ctrl c」用於終止程序時程序不停止
- 27. 當我不在等待父級中的子進程時,如何終止程序?
- 28. 終止進程在linux
- 29. Python中的子進程終止
- 30. 「execv」子進程存在和終止
如何創建和啓動子進程?使用Shell函數,CreateProcess API,DCOM或其他方法? – Arvo 2013-04-09 13:39:24
@Arvo實際上,我的程序開始一個服務,當我的程序終止時需要停止。在這種情況下,只能使用Shell函數或CreateProcess,我準備好使用這些。 – user2245523 2013-04-09 15:27:31
「服務」是指Windows服務嗎?你將問題定義爲與應用程序產生的子進程有關。 – 2013-04-09 16:33:41