我一次只需要允许 Golang 可执行文件的一个实例。我不确定如何使用全局互斥体来确保没有其他实例正在运行。
这将在 Windows 机器上运行。
我知道这个主题有点老了,但我最近在 Windows 上需要它,我将在这里发布我是如何做到的,以防其他人需要。
感谢@VonC 为我指明了正确的方向。
var (
kernel32 = syscall.NewLazyDLL("kernel32.dll")
procCreateMutex = kernel32.NewProc("CreateMutexW")
)
func CreateMutex(name string) (uintptr, error) {
ret, _, err := procCreateMutex.Call(
0,
0,
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(name))),
)
switch int(err.(syscall.Errno)) {
case 0:
return ret, nil
default:
return ret, err
}
}
// mutexName starting with "Global\" will work across all user sessions
_, err := CreateMutex("SomeMutexName")
我创建了一个带有更完整示例的库:https://github.com/rodolfoag/gow32 https://github.com/rodolfoag/gow32
Thx!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)