I know this topic is a bit old, but I needed it recently on Windows and 
I'll post here how I did it in case someone else needs.

I used Windows mutex as described by ankurg...@gmail.com:

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

func CreateMutex(name string) (uintptr, error) {
    ret, _, err := procCreateMutex.Call(
    switch int(err.(syscall.Errno)) {
    case 0:
        return ret, nil
        return ret, err

// mutexName starting with "Global\" will work across all user sessions
_, err := CreateMutex("SomeMutexName")

I created a lib with a more complete example: 


Em sábado, 4 de junho de 2016 11:30:14 UTC-3, ankurgu...@gmail.com escreveu:
> The simplest solution would be to do it using MUTEX, here is how to do it 
> <http://getgoingit.blogspot.in/2016/06/restrict-desktop-application-to-single.html>
>  along 
> with description.
> On Wednesday, 22 January 2014 09:22:34 UTC+5:30, Shark Flh wrote:
>> how to restrict the program run only  one instance
>> what method can work on windows and Linux both system?
>> for example I have a program test.exe, I copy it to 2 dir
>> a/test.exe
>> b/test.exe
>> I want  restrict the test.exe can only run one instance from each dir.
>> i tried open  file use ModeExclusive,but it doesn't on windows.

You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to