作者:知乎用户
链接:https://www.zhihu.com/question/41110715/answer/293840983
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
先说一下代码是如何实现一个系统就只能登陆一个软件的。
听说过“死锁”的名词吧。 操作系统上有两类锁,一类是进程内可见的,一类是跨进程可见的。
应用程序想做单实例运行, 是利用了后者, 声明一个跨进程可见的锁(互斥量Mutex)。 第二个程序启动时检测是否有这个锁的存在, 如果有就退出,如果没有就正常启动。
好了, 了解了这点知识后,我们就有解决办法, 只要想办法找到这个锁并关闭它就可以了。
1。 如何找到它
下载微软的增强版资源管理器 地址Process Explorer – Windows Sysinternals
下载后用管理员身份运行,找到WeChat,就是微信,如下图
按下Ctrl+L , Show Lower Pane显示详细信息的意思。
找到下面的两把锁。
然后右键, Close Handle, 结束掉它。 两个后结束掉。
WeChat_GlobalConfig_Multi_Process_Mutex
_WeChat_App_Instance_Identity_Mutex_Name
你看, 人家命名的多好啊。
OK了, 可以打开第二个微信了。
——-华丽的分割新——
我看有人在评论区问我企业微信如何多开, 我看下一下,企业微信跟微信是使用不同思路做的进程互斥判断。它貌似是使用命名管道进行了互斥判断(这个还不是很确定,我没有追踪它内部代码逻辑)。
用PM追踪一下可以看到企业微信在登录时其实是有读取注册表中的HKCU\Software\Tencent\WXWork\multi_instances 健值的。
打开注册表: 开始 》 运行 》 regedit,找到这个路径下的健值项。
双击这个健可以修改,我这里修改为3.
OK, 可以尝试打开第二个企业微信了。