我正在寻找一种有效的方法来确定给定的应用程序(比如 app.exe)是否是单实例?我想到了以下这些 sol:
- 执行两次 CreateProcess() 并检查该应用程序是否有两个或更多实例在运行?如果不是,则为单实例应用程序。但是,这效率不高。
- 执行 CreateProcess() 并等待 1-2 秒。如果这个实例被杀死(因为已经有一个实例在为它运行),它将是单实例应用程序。
但我对以上两个 sol 都不满意。在 Windows 中还有其他有效的方法吗?
请注意,我不会终止该应用程序的已运行(如果有)实例或对其进行任何修改。
最佳答案
换个角度想:你写程序的时候,怎么规定是单实例还是多实例?有没有其他程序可以在不运行程序的情况下从您的程序中获取该信息的方法? (一旦你回答了这个问题,你的问题就有了答案。)
这个问题一般无法解决,因为单实例/多实例是在运行时确定的,可以基于运行时条件。例如,某些应用程序是“有时是多实例,有时是单实例”:如果您运行应用程序打开文档 X,然后打开文档 Y,您将获得两个实例。但是,如果您打开文档 X,然后再次打开文档 X,则这两个实例将合并为一个。其他应用程序可能有一个配置开关,可以让您选择它们是单实例还是多实例。或者他们可能决定掷硬币并决定如果反面是单例,如果是正面则为多例。
关于c++ - 如何查找给定应用程序是否为单实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6516121/