使用VB.NET(Compact Framework 2.0)检查进程是否正在运行

使用VB.NET(Compact Framework 2.0)检查进程是否正在运行,vb.net,process,compact-framework,Vb.net,Process,Compact Framework,我正在开发一个(控制台)应用程序,它应该在启动时执行,并且一直在后台运行(每30分钟执行一次)。 在另一个(设备)应用程序中,我如何检查我的控制台应用程序是否正在运行(如果没有运行,则启动它)?我正在使用VB.NET CF 2.0,所有东西都部署在运行WM 6.5 我找到的所有代码示例仅在“standard.NET”上可用。您的“监控”应用程序有几种工作方式(当然比我在这里列出的更多) 使用一个命名的互斥体(您必须P/调用它)。被监控的应用程序将创建并保存它,监控应用程序将定期检查以确保它被保存

我正在开发一个(控制台)应用程序,它应该在启动时执行,并且一直在后台运行(每30分钟执行一次)。

在另一个(设备)应用程序中,我如何检查我的控制台应用程序是否正在运行(如果没有运行,则启动它)?
我正在使用
VB.NET CF 2.0
,所有东西都部署在运行
WM 6.5


我找到的所有代码示例仅在“standard.NET”上可用。

您的“监控”应用程序有几种工作方式(当然比我在这里列出的更多)

  • 使用一个命名的互斥体(您必须P/调用它)。被监控的应用程序将创建并保存它,监控应用程序将定期检查以确保它被保存。如果未保持,则受监控的应用程序将不再运行
  • 使用工具帮助API。让监控应用程序使用Toolhelp API定期枚举正在运行的进程。如果受监视的应用程序不在进程列表中,则表示它未运行
  • 使用命名事件。受监控的应用程序将有一个后台线程,定期设置一个命名(看门狗)事件。监控应用程序将等待该事件,如果在某个时间范围内无法获取该事件,则另一个应用程序可能未运行或已锁定
  • 使用插座。让受监控的应用程序打开一个套接字并监听它。监控应用程序将定期向监控应用程序发送“ping”。受监视的应用程序将使用ack响应ping。如果监控应用程序未获得确认,则监控应用程序未运行或被锁定
  • 使用窗把手。监控应用程序定期P/调用
    FindWindow
    GetWindow
    ,以查找监控应用程序中始终存在的窗口-通常通过表单文本。如果监控应用程序找不到窗口,则表示监控应用程序未运行

  • 我对这个紧凑的框架没有真正的了解,但在正常的框架中,我在应用程序中使用了互斥。一开始,我会将类似于
    私有mutexProgram的互斥体注册为New Threading.mutex(True,“Global\”+“MyApp-{451212537372723232535b}”)
    (这里有一些随机数)在我的应用程序开始时,我检查这个互斥体,比如
    Dim MutexExists As Boolean=True尝试Dim As Threading.mutex=Threading.mutex.OpenExisting(“Global\”+“MyApp-{45121253737723232535b}”)Catch MutexExists=False End Try
    我不知道这是否适用于您的问题,因此我没有将其作为答案发布,但它可能值得您查看。您可以再详细说明一下吗?比如,那些“随机数”是什么?当创建一个新的互斥体时,我能给它的唯一参数是一个布尔值(在.NET4.5中似乎是可用的),互斥体对象以某种方式用于线程同步(我在任何方面都不是专家,所以我对这方面不太了解)。其中的数字只是互斥体名称的一部分,对于您的应用程序来说应该是唯一的(请参见此处的MSDN)。第二部分主要尝试从程序的第二个实例打开互斥对象。如果它存在,则表示应用程序已在运行,您可以相应地执行操作。如果它不存在,它会抛出一个异常,您知道应用程序没有运行。我发现这可能不适合您。请看这里: