Windows 是否有任何特定的方式/方法区分两个程序?例如,为什么我不能同时运行两个相同的程序?或者我是否可以通过修改任何程序/注册表文件来做到这一点?
答案1
据我所知,Windows 中没有内置任何功能来阻止可执行文件的多次执行。如果第二个副本不运行,那么作者就是这样设计的。
为什么有人要限制它?
对于我们的一款应用,我们发现用户会打开一份副本,开始编辑账单。然后他们会离开休息一下。与此同时,其他想用电脑做其他事情的人会最小化我们的应用程序。最初的用户会回来,找不到应用程序并开始另一份副本。如果没有找到已经打开的账单,就会尝试打开另一份副本。当然,应用程序会告诉他们账单已经被他们锁定了。但他们拒绝相信,并一直打电话给支持人员。
我们的解决方案是确保只有一个实例运行。尝试运行第二个副本会将其终止,并使原始副本进入视野。
这是怎么做到的?
有很多方法,大多数涉及某种 Windows 进程间通信
- 发送 Windows信息(消息,管道)
- 用一个信号(互斥)
- 使用查找窗口查看它是否已在运行
- 使用数据库锁定
我们正在寻找窗口,然后向其发送有针对性的消息。
答案2
此行为因程序而异(特定构建指令限制或允许运行一个二进制映像的多个实例)。在某些情况下,程序具有允许运行其多个实例的配置选项。为了简化使用一个二进制文件的多个“副本”的方式,您可以以另一个用户身份运行 .exe 的第二个(第三个等)实例(应该在之前创建)。