无法在VB.net中获取进程死亡

无法在VB.net中获取进程死亡,vb.net,Vb.net,我继承了一些VB.net代码。我的任务是找出它不起作用的原因。我有两份申请。第一个 作为服务运行,无限检查表以查看是否有任何任务要处理。如果它找到一个,它应该启动第二个应用程序来处理任务,然后返回循环并检查另一个。这两个应用程序都是表单,但它们不显示任何窗口。我遇到的问题是,在第二个应用程序完成后,第一个应用程序从未收到信号,因此它一直在等待,因此它无法进入下一个任务。如果我进入TaskManager并杀死第二个应用程序,第一个应用程序将收到该通知并按其应该的方式继续。下面是我如何创建流程并等待

我继承了一些VB.net代码。我的任务是找出它不起作用的原因。我有两份申请。第一个

作为服务运行,无限检查表以查看是否有任何任务要处理。如果它找到一个,它应该启动第二个应用程序来处理任务,然后返回循环并检查另一个。这两个应用程序都是表单,但它们不显示任何窗口。我遇到的问题是,在第二个应用程序完成后,第一个应用程序从未收到信号,因此它一直在等待,因此它无法进入下一个任务。如果我进入TaskManager并杀死第二个应用程序,第一个应用程序将收到该通知并按其应该的方式继续。下面是我如何创建流程并等待它。我尝试了几种不同的创建和等待流程的方法(使用Shell/OpenProcess、WaitForSingleObject等),但我无法让它工作。我在互联网、StackOverflow和MSDN网站上搜索过,但我尝试过的都不管用。这件事我已经搞了两天了

表1荷载:

Dim ProcessProperties As New ProcessStartInfo
ProcessProperties.FileName = strExeFullPath
ProcessProperties.Arguments = " /project " & l_project 
ProcessProperties.CreateNoWindow = True
Dim myProcess As Process = Process.Start(ProcessProperties)
myProcess.WaitForExit()
当Form2完成时,它在加载子例程中执行Me.Close()和Exit子例程,但该进程仍显示在TaskManager中,并且永远不会返回Form1,因此Form1永远处于WaitForExit中。我尝试过关闭每个打开的文件和连接,并在Form2、Me.Dispose等中将它们设置为Nothing。我尝试过Application.Exit作为Form2的最后一行。那愚蠢的东西不会死的!!为什么它不会死

我错过了什么

如果我进入TaskManager并杀死第二个应用程序,第一个应用程序就会收到通知

请注意,真正的问题是,第二个应用程序本身并没有退出。因此myProcess.WaitForExit()不会返回。因此,这在您的代码片段中不是问题

你的问题完全不清楚为什么第二个应用程序不想退出。考虑到它是一个Windows窗体应用程序,请记住没有人可以单击窗体的“关闭”按钮。Application.Exit()应该使其停止,Environment.Exit()是一种粗暴的中止,不能被FormClosing事件处理程序否决。

无论如何,请使用以下方法:

ProcessProperties.Arguments = String.Format("/project {0}", 1_project)
不需要前导空格,代码可读性更强


干杯

我怀疑
Form2
试图在退出前显示一些模式对话框(可能是消息框,可能是未处理的异常框)。由于
App2
是由
App1
启动的,这是一项服务,
Form2
无法与桌面交互,只能坐在那里等待永远不会发生的按钮点击


尝试允许
App1
服务与桌面交互(您可以在“服务属性”对话框的
Log on
选项卡上找到该选项),并检查
Form2
是否在退出前实际弹出一个对话框。

您的意思是
App1
是一个Windows服务,而
App2
是由用户运行的,或者是
App1
服务本身启动
App2
?App1启动App2。最终App1将由FireDaemon启动,但现在我正在从命令行运行它。它在通过FireDaemon运行时的行为方式相同。很抱歉给你带来了困惑。我还在学术语。谢谢!这就是我的想法,但我想确保我正确启动了这个过程,这就是为什么我包含了这个片段。为了让第二个应用程序完全退出,我已经尝试了我能想到的一切。尚未尝试Environment.Exit,但Application.Exit()未执行此操作。我已经尝试将第二个应用程序中使用的所有内容设置为“无”,并确保在退出之前关闭所有打开的文件和连接,并将其设置为“无”。我不知道如何找出它到底是什么。如果我必须这样做,我们可以粗鲁地杀死它,但如果可能的话,我宁愿第二个应用程序优雅地退出。在评论中没有任何东西能帮助你。对不起。我只是想寻求一些人的帮助,他们可能以前遇到过这种情况,可能对我可能缺少的东西有一些了解,或者为我指明了获取更多信息的方向。我不知道还能说些什么,那样会有帮助。我试过的都写了。如果有其他类型的信息,我可以张贴,这将是有益的,请让我知道。