奇怪的互斥对象,该怎么解决

奇怪的互斥对象
//button.onclick(sender) 
 h:=createMutex(nil,false,Mutex_name);
  if h=0
  then showmessage('创建互斥对象失败!')
  else
  begin
  s:=getlasterror;
  case s of
  error_already_exists:
  begin
  memo1.Lines.Add('已经创建的互斥对象!');
if application.MessageBox('已经存在的互斥对象,需要删除吗?','提问',mb_yesNo+mb_iconquestion=mryes
then
begin
memo1.Lines.Add('删除创建的互斥对象');
releaseMutex(h);
closehandle(h); end;
  end;
  0: showmessage('操作成功')
  else showmessage('异常');
  end;
  end;
  上述代码中的红色部分在互斥对象被删除后,再次点击按钮怎么还会提示已创建的互斥对象。


------解决方案--------------------
CreateMutex和OpenMutex在该Mutex已存在时,结果一样,都会返回一个副本HANDLE。
也就是就,你第二次按button时h不是原来的handle,而是一个副本HANDLE
用CloseHandle来释放Mutex时,只是释放当前进程获得的副本句柄,而不会删除该Mutex内核对象。
所以会出现你的结果