我想创建一个将运行两个子进程的程序。现在,我希望当我的应用程序被任务管理器终止或崩溃时,它的两个子进程应该会自动终止。我怎样才能做到这一点?在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. 从终端自动终止java进程
- 4. 后台进程在其父进程终止时被终止?
- 5. Python:在创建子进程后终止父进程
- 6. 子进程终止清理
- 7. 死锁:创建(所有进程终止)
- 8. 守护进程自动终止
- 9. WKWebView进程终止
- 10. 程序在文件移动时终止
- 11. 如何在c#控制台应用程序中止时终止子进程?
- 12. 终止进程在linux
- 13. “execv”子进程存在和终止
- 14. 如何检查Linux进程以确定进程何时/何时终止/终止?
- 15. 程序,不终止
- 16. 程序终止accept()
- 17. 终止scala程序?
- 18. 停止主管进程而不会终止其他子进程
- 19. 当退出时终止在xterm内启动的所有进程
- 20. GIWS在构造类时终止进程
- 21. 在进程终止时释放资源
- 22. 在进程终止时运行脚本
- 23. sem_close vs sem_unlink当进程终止
- 24. 当他的流(错误和输入流)终止时,java进程是否终止?
- 25. 如何创建在程序终止后自动删除的临时文件
- 26. 如何退出/暂停/终止/终止/停止MSBuild进程?
- 27. 当调试停止时,VS2015不会终止IIS进程
- 28. 终止程序退出时在线程中运行的子进程
- 29. 在C中终止子进程后,父进程未完成
- 30. 当从Python子进程终止时的C++调用函数
如何创建和启动子进程?使用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