如何查找给定的应用程序是否是单个实例?

bay*_*der 2 c++ windows process createprocess single-instance

我正在寻找一种有效的方法来查找给定的应用程序(比如app.exe)是否是单个实例?我想到了以下这些解决方案:

  1. 执行两次CreateProcess()并检查该应用程序是否有两个或更多实例运行?如果不是,则为单实例应用程序.但是,这效率不高.
  2. 执行CreateProcess()并等待1-2秒.如果此实例被终止(因为已经有一个实例正在运行),它将是单实例应用程序.

但我不相信上述两种解决方案.在Windows中还有其他有效的方法吗?

请注意,我不会杀死或对该应用程序的已运行(如果有)实例进行任何修改.

Ray*_*hen 7

另外考虑一下:编写程序时,如何指定它是单实例还是多实例?是否有一种方法可以让其他程序在不运行程序的情况下从程序中获取该信息?(一旦你回答了这个问题,那么你就得到了问题的答案.)

这个问题通常无法解决,因为单实例/多实例在运行时确定并且可以基于运行时条件.例如,某些应用程序"有时是多个实例,有时是单个":如果运行应用程序打开文档X,然后生成文档Y,则将获得两个实例.但是,如果您打开文档X,然后再次打开文档X,这两个实例将折叠成一个.其他应用程序可能具有配置开关,您可以选择它们是单实例还是多实例.或者也许他们决定翻转一枚硬币并决定是单一实例,如果是尾巴和多个实例,如果是头.