用互斥体判断程序是否已运行的问题

mac_forward 2003-12-24 02:25:39
我开了一个 winmine.exe

然后在程序里用到了

LPCTSTR pszAppName=TEXT("winmine.exe");
HANDLE m_hMutex=CreateMutex(NULL,TRUE,pszAppName);
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
AfxMessageBox("程序已经运行!");
return FALSE;
}

程序依然无法判断winmine.exe已经运行,why?
...全文
142 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liwz123 2003-12-24
  • 打赏
  • 举报
回复
楼上说得对
NowCan 2003-12-24
  • 打赏
  • 举报
回复
楼上几位都没说到点子上。
关键是winmine.exe不是你写的程序,它又不会建立那个Mutex,所以你的程序运行第一个实例时当然不会检测到Mutex已经存在,而你的程序在运行第二个实例是就会检测到你自己这个程序在运行。
alfwolf 2003-12-24
  • 打赏
  • 举报
回复
在app的InitInstance中:
HANDLE h=CreateMutex(NULL,FALSE,"{YOURPROG-RUN-ALREADY}");
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
AfxMessageBox("系统已经在运行,即将退出...",MB_ICONERROR);
exit(0);
}
lizmei001 2003-12-24
  • 打赏
  • 举报
回复
HANDLE m_hMutex=CreateMutex(NULL,TRUE,pszAppName);
if(m_hMutex && GetLastError()==ERROR_ALREADY_EXISTS)
{
AfxMessageBox("程序已经运行!");
return FALSE;
}
vcforever 2003-12-24
  • 打赏
  • 举报
回复
m_hMutex你的这个句柄是局部变量,把他的定义放在头文件中如:
xxxApp.h
HANDLE m_hMutex;

然后在你的InitInstance()函数中添加如下代码
CString strClassName="SingleInstance";
// 判断是否有一名为"SingleInstance"的mutex存在
m_hMutex = OpenMutex (MUTEX_ALL_ACCESS, FALSE, strClassName) ;
if (m_hMutex == NULL)
{
// m_hMutex不存在,表示没有其它实例在运行,创建一个m_hMutex
m_hMutex = CreateMutex (NULL, TRUE, strClassName) ;
}
else
{
// 如果m_hMutex存在,表示已经有一个实例在运行,
// 或者其它的程序创建了一个名为"SingleInstance"的m_hMutex
::AfxMessageBox("已经有一个实例在运行!",MB_OK|MB_ICONEXCLAMATION);
// 结束程序
return FALSE;
}

希望对你有所帮助!
C#源码大集合 02(共3卷) 之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷) ├─C#源码第一部分 │ ├─第1章 控件操作 │ │ ├─实例1 如何使用错误提醒控件 │ │ ├─实例10 如何使用列表视图控件 │ │ ├─实例11 如何使用多选列表框控件 │ │ ├─实例12 如何使用图像控件 │ │ ├─实例13 如何使用窗分隔控件 │ │ ├─实例2 如何使用信息提示控件 │ │ ├─实例3 如何使用菜单控件 │ │ ├─实例4 如何使用工具栏控件 │ │ ├─实例5 如何使用状态栏控件 │ │ ├─实例6 如何使用托盘控件 │ │ ├─实例7 如何使用标签页控件 │ │ ├─实例8 如何使用进度条控件 │ │ └─实例9 如何使用树视图控件 │ ├─第2章 文件管理 │ │ ├─实例14 如何获取程序文件信息 │ │ ├─实例15 如何获取指定文件的根信息 │ │ ├─实例16 如何获取当前程序所在的文件夹 │ │ ├─实例17 如何获取指定文件夹下的所有文件 │ │ ├─实例18 如何获取指定文件夹下的所有文件夹 │ │ ├─实例19 如何获取和设置文件属性 │ │ ├─实例20 如何获取和设置文件夹属性 │ │ ├─实例21 如何判断文件或文件夹是否存在 │ │ ├─实例22 如何创建和删除多层文件夹 │ │ ├─实例23 如何监视文件和文件夹系统变化情况 │ │ ├─实例24 如何加解密文件 │ │ ├─实例25 如何切分组合文件 │ │ ├─实例26 如何以流式方式读写文本文件 │ │ ├─实例27 如何直接打印文件 │ │ ├─实例28 如何操作帮助文件 │ │ ├─实例29 如何操作WORD文件 │ │ ├─实例31 如何播放MP3文件 │ │ ├─实例32 如何播放VCD文件 │ │ ├─实例33 如何播放DVD文件 │ │ ├─实例34 如何播放Flash文件 │ │ └─实例35 如何播放RealPlayer文件 │ ├─第3章 程序设置 │ │ ├─实例36 如何创建椭圆形窗 │ │ ├─实例37 如何创建文字形窗 │ │ ├─实例38 如何创建不规则窗 │ │ ├─实例39 如何创建移动的窗 │ │ ├─实例40 如何创建无标题栏窗 │ │ ├─实例41 如何拖动无标题栏窗 │ │ ├─实例42 如何制作自绘式菜单 │ │ ├─实例43 如何制作图形组合框 │ │ ├─实例44 如何设置窗的透明度 │ │ ├─实例45 如何设置窗启动位置 │ │ ├─实例46 如何设置窗最前端显示 │ │ ├─实例47 如何实现精灵提示 │ │ ├─实例48 如何实现打印预览 │ │ ├─实例49 如何实现剪贴板循环 │ │ ├─实例50 如何实现菜单历史列表 │ │ ├─实例51 如何实现程序互斥运行 │ │ ├─实例52 如何屏蔽鼠标消息 │ │ ├─实例53 如何模拟键盘输入 │ │ ├─实例54 如何使用消息提示框 │ │ ├─实例55 如何使用系统API函数(INI) │ │ ├─实例56 如何获取和设置输入法 │ │ ├─实例57 如何在程序中启动其他程序 │ │ ├─实例58 如何在程序中关闭其他程序 │ │ ├─实例59 如何在开机时自动启动程序 │ │ ├─实例60 如何启动电话拨号程序 │ │ ├─实例61 如何启动屏幕保护程序 │ │ ├─实例62 如何启动系统控制面板程序 │ │ ├─实例63 如何编写多线程程序 │ │ ├─实例64 如何编写DLL服务端程序 │ │ ├─实例65 如何编写DLL客户端程序 │ │ ├─实例66 如何编写用户控件程序 │ │ └─实例67 如何给程序打包 │ ├─第4章 系统维护 │ │ ├─实例68 如何获取系统基本信息 │ │ ├─实例69 如何获取系统服务信息 │ │ ├─实例70 如何获取系统进程信息 │ │ ├─实例71 如何获取系统日期时间 │ │ ├─实例72 如何获取系统所有驱动器 │ │ ├─实例73 如何获取系统驱动器信息 │ │ ├─实例74 如何获取系统计数器信息 │ │ ├─实例75 如何获取操作系统版本信息 │ │ ├─实例76 如何获取系统特殊文件夹信息 │ │ ├─实例77 如何获取系统文化和国家信息 │ │ ├─实例78 如何获取系统已经安装的字 │ │ ├─实例79 如何获取系统安装日期和启动时间 │ │ ├─实例80 如何获取CPU信息 │ │ ├─实例81 如何浏览注册表信息 │ │ ├─实例82 如何隐藏系统驱动器 │ │ ├─实例83 如何清理系统回收站 │ │ ├─实例84 如何制作日志查看器 │ │ ├─实例85 如何禁止关闭操作系统
C#源码大集合 01(共3卷)之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷)├─C#源码第一部分│ ├─第1章 控件操作│ │ ├─实例1 如何使用错误提醒控件│ │ ├─实例10 如何使用列表视图控件│ │ ├─实例11 如何使用多选列表框控件│ │ ├─实例12 如何使用图像控件│ │ ├─实例13 如何使用窗分隔控件│ │ ├─实例2 如何使用信息提示控件│ │ ├─实例3 如何使用菜单控件│ │ ├─实例4 如何使用工具栏控件│ │ ├─实例5 如何使用状态栏控件│ │ ├─实例6 如何使用托盘控件│ │ ├─实例7 如何使用标签页控件│ │ ├─实例8 如何使用进度条控件│ │ └─实例9 如何使用树视图控件│ ├─第2章 文件管理│ │ ├─实例14 如何获取程序文件信息│ │ ├─实例15 如何获取指定文件的根信息│ │ ├─实例16 如何获取当前程序所在的文件夹│ │ ├─实例17 如何获取指定文件夹下的所有文件│ │ ├─实例18 如何获取指定文件夹下的所有文件夹│ │ ├─实例19 如何获取和设置文件属性│ │ ├─实例20 如何获取和设置文件夹属性│ │ ├─实例21 如何判断文件或文件夹是否存在│ │ ├─实例22 如何创建和删除多层文件夹│ │ ├─实例23 如何监视文件和文件夹系统变化情况│ │ ├─实例24 如何加解密文件│ │ ├─实例25 如何切分组合文件│ │ ├─实例26 如何以流式方式读写文本文件│ │ ├─实例27 如何直接打印文件│ │ ├─实例28 如何操作帮助文件│ │ ├─实例29 如何操作WORD文件│ │ ├─实例31 如何播放MP3文件│ │ ├─实例32 如何播放VCD文件│ │ ├─实例33 如何播放DVD文件│ │ ├─实例34 如何播放Flash文件│ │ └─实例35 如何播放RealPlayer文件│ ├─第3章 程序设置│ │ ├─实例36 如何创建椭圆形窗│ │ ├─实例37 如何创建文字形窗│ │ ├─实例38 如何创建不规则窗│ │ ├─实例39 如何创建移动的窗│ │ ├─实例40 如何创建无标题栏窗│ │ ├─实例41 如何拖动无标题栏窗│ │ ├─实例42 如何制作自绘式菜单│ │ ├─实例43 如何制作图形组合框│ │ ├─实例44 如何设置窗的透明度│ │ ├─实例45 如何设置窗启动位置│ │ ├─实例46 如何设置窗最前端显示│ │ ├─实例47 如何实现精灵提示│ │ ├─实例48 如何实现打印预览│ │ ├─实例49 如何实现剪贴板循环│ │ ├─实例50 如何实现菜单历史列表│ │ ├─实例51 如何实现程序互斥运行│ │ ├─实例52 如何屏蔽鼠标消息│ │ ├─实例53 如何模拟键盘输入│ │ ├─实例54 如何使用消息提示框│ │ ├─实例55 如何使用系统API函数(INI)│ │ ├─实例56 如何获取和设置输入法│ │ ├─实例57 如何在程序中启动其他程序│ │ ├─实例58 如何在程序中关闭其他程序│ │ ├─实例59 如何在开机时自动启动程序│ │ ├─实例60 如何启动电话拨号程序│ │ ├─实例61 如何启动屏幕保护程序│ │ ├─实例62 如何启动系统控制面板程序│ │ ├─实例63 如何编写多线程程序│ │ ├─实例64 如何编写DLL服务端程序│ │ ├─实例65 如何编写DLL客户端程序│ │ ├─实例66 如何编写用户控件程序│ │ └─实例67 如何给程序打包│ ├─第4章 系统维护│ │ ├─实例68 如何获取系统基本信息│ │ ├─实例69 如何获取系统服务信息│ │ ├─实例70 如何获取系统进程信息│ │ ├─实例71 如何获取系统日期时间│ │ ├─实例72 如何获取系统所有驱动器│ │ ├─实例73 如何获取系统驱动器信息│ │ ├─实例74 如何获取系统计数器信息│ │
C#源码大集合 03(共3卷)之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷)├─C#源码第一部分│ ├─第1章 控件操作│ │ ├─实例1 如何使用错误提醒控件│ │ ├─实例10 如何使用列表视图控件│ │ ├─实例11 如何使用多选列表框控件│ │ ├─实例12 如何使用图像控件│ │ ├─实例13 如何使用窗分隔控件│ │ ├─实例2 如何使用信息提示控件│ │ ├─实例3 如何使用菜单控件│ │ ├─实例4 如何使用工具栏控件│ │ ├─实例5 如何使用状态栏控件│ │ ├─实例6 如何使用托盘控件│ │ ├─实例7 如何使用标签页控件│ │ ├─实例8 如何使用进度条控件│ │ └─实例9 如何使用树视图控件│ ├─第2章 文件管理│ │ ├─实例14 如何获取程序文件信息│ │ ├─实例15 如何获取指定文件的根信息│ │ ├─实例16 如何获取当前程序所在的文件夹│ │ ├─实例17 如何获取指定文件夹下的所有文件│ │ ├─实例18 如何获取指定文件夹下的所有文件夹│ │ ├─实例19 如何获取和设置文件属性│ │ ├─实例20 如何获取和设置文件夹属性│ │ ├─实例21 如何判断文件或文件夹是否存在│ │ ├─实例22 如何创建和删除多层文件夹│ │ ├─实例23 如何监视文件和文件夹系统变化情况│ │ ├─实例24 如何加解密文件│ │ ├─实例25 如何切分组合文件│ │ ├─实例26 如何以流式方式读写文本文件│ │ ├─实例27 如何直接打印文件│ │ ├─实例28 如何操作帮助文件│ │ ├─实例29 如何操作WORD文件│ │ ├─实例31 如何播放MP3文件│ │ ├─实例32 如何播放VCD文件│ │ ├─实例33 如何播放DVD文件│ │ ├─实例34 如何播放Flash文件│ │ └─实例35 如何播放RealPlayer文件│ ├─第3章 程序设置│ │ ├─实例36 如何创建椭圆形窗│ │ ├─实例37 如何创建文字形窗│ │ ├─实例38 如何创建不规则窗│ │ ├─实例39 如何创建移动的窗│ │ ├─实例40 如何创建无标题栏窗│ │ ├─实例41 如何拖动无标题栏窗│ │ ├─实例42 如何制作自绘式菜单│ │ ├─实例43 如何制作图形组合框│ │ ├─实例44 如何设置窗的透明度│ │ ├─实例45 如何设置窗启动位置│ │ ├─实例46 如何设置窗最前端显示│ │ ├─实例47 如何实现精灵提示│ │ ├─实例48 如何实现打印预览│ │ ├─实例49 如何实现剪贴板循环│ │ ├─实例50 如何实现菜单历史列表│ │ ├─实例51 如何实现程序互斥运行│ │ ├─实例52 如何屏蔽鼠标消息│ │ ├─实例53 如何模拟键盘输入│ │ ├─实例54 如何使用消息提示框│ │ ├─实例55 如何使用系统API函数(INI)│ │ ├─实例56 如何获取和设置输入法│ │ ├─实例57 如何在程序中启动其他程序│ │ ├─实例58 如何在程序中关闭其他程序│ │ ├─实例59 如何在开机时自动启动程序│ │ ├─实例60 如何启动电话拨号程序│ │ ├─实例61 如何启动屏幕保护程序│ │ ├─实例62 如何启动系统控制面板程序│ │ ├─实例63 如何编写多线程程序│ │ ├─实例64 如何编写DLL服务端程序│ │ ├─实例65 如何编写DLL客户端程序│ │ ├─实例66 如何编写用户控件程序│ │ └─实例67 如何给程序打包│ ├─第4章 系统维护│ │ ├─实例68 如何获取系统基本信息│ │ ├─实例69 如何获取系统服务信息│ │ ├─实例70 如何获取系统进程信息│ │ ├─实例71 如何获取系统日期时间│ │ ├─实例72 如何获取系统所有驱动器│ │ ├─实例73 如何获取系统驱动器信息│ │ ├─实例74 如何获取系统计数器信息│ │

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧