加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 使用Golang限制为可执行文件的单个实例

发布时间:2020-12-13 22:30:29 所属栏目:Windows 来源:网络整理
导读:我需要一次只允许一个Golang可执行文件的实例.我不确定如何使用Global Mutex来确保没有其他实例正在运行. 这将在Windows机器上运行. 解决方法 我知道这个主题有点旧,但我最近在Windows上需要它,我会在这里发布我是如何做到的,以防其他人需要. 感谢@VonC让我
我需要一次只允许一个Golang可执行文件的实例.我不确定如何使用Global Mutex来确保没有其他实例正在运行.

这将在Windows机器上运行.

解决方法

我知道这个主题有点旧,但我最近在Windows上需要它,我会在这里发布我是如何做到的,以防其他人需要.

感谢@VonC让我指向正确的方向.

var (
    kernel32        = syscall.NewLazyDLL("kernel32.dll")
    procCreateMutex = kernel32.NewProc("CreateMutexW")
)

func CreateMutex(name string) (uintptr,error) {
    ret,_,err := procCreateMutex.Call(
        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")

我用一个更完整的例子创建了一个lib:https://github.com/rodolfoag/gow32

谢谢!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读