CreateMutex 防止程序启动两次问题,一个制作为服务启动,不能阻止另一个以控制台方式启动。

qq_30817023 2018-07-02 03:11:12
CreateMutex 防止程序启动两次问题,一个制作为服务启动,一个以控制台方式启动。

当以服务器方式启动后,再以控制台方式启动还是能启动,不能防止两次运行。

但如果都以控制台启用则可以防止两次运行。

有没有什么办法可以使程序以服务启动后不以控制台方式启动。
 HANDLE appInstance = CreateMutexA(&sa, FALSE, "PlcsInst");

if (GetLastError() == ERROR_ALREADY_EXISTS)
{
::MessageBoxA(NULL, "程序已经启动,不能重复运行!", "提示信息", MB_ICONWARNING | MB_OK);
CloseHandle(appInstance);
appInstance = NULL;
return FALSE;
}
...全文
146 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2018-07-02
  • 打赏
  • 举报
回复
创建mutex的进程需要有创建全局可见对象的权限SeCreateGlobalPrivilege。这个在服务中做比较容易,做成系统服务就行。控制台要做到的话,需要用管理员身份启动。
Eleven 2018-07-02
  • 打赏
  • 举报
回复
把 你的安全描述符改一下,让所有程序都能访问的最低权限试试

https://blog.csdn.net/hanxin1987216/article/details/4538590
qq_30817023 2018-07-02
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
用"Global\\xxxx"命名的内核对象呢?

这个不行
改成HANDLE appInstance = CreateMutexA(&sa, FALSE, "Global\\PlcsInst");后
启动服务后,仍然可用exe启动,并且会导致exe可以多次启动。
Eleven 2018-07-02
  • 打赏
  • 举报
回复
用"Global\\xxxx"命名的内核对象呢?

15,471

社区成员

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

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