首页
社区
课程
招聘
[求助]如何实现程序只能运行一个实例(包括切换用户)
发表于: 2008-5-5 13:57 6952

[求助]如何实现程序只能运行一个实例(包括切换用户)

2008-5-5 13:57
6952
如题所示。
在同一个用户下,可以很方便的实现某个程序只有一个实例运行。
如何实现切换用户后,也只能运行一个程序呢?

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
2
Mutex互斥即可。

//////////////////////////////////////////////////////////////////////////////////
//--------------------------------------------------------------------------------
// Author: sudami 2007/10/6
//
// 函数名: CreateOneAppMutex
//
// 参数: LPCTSTR lpName
// 标识互斥对象
//
// 返回值: HANDLE
// 互斥对象的句柄
//
// 函数功能: 通过互斥对象实现惟一的进程
//--------------------------------------------------------------------------------
HANDLE CreateOneAppMutex (LPCTSTR lpName)
{
    HANDLE hMutex;
    hMutex = ::CreateMutex (NULLTRUE, lpName);
    
    switch(::GetLastError())
    {
    case ERROR_SUCCESS:
        // 互斥对象创建成功,没有实例运行
        break;
        
    case ERROR_ALREADY_EXISTS:
        // 互斥对象已经存在,程序的一个实例正在运行
        // 设置句柄为空
        hMutex = NULL;
        break;
        
    default:
        break;
    }
    
    return hMutex;
}


然后在程序初始化的时候调用这个函数即可。

BOOL CMyApp::InitInstance ()
{
    /***********************************************************
* *
* 判断程序是否已经存在,若存在则退出 *
* *
***********************************************************/

    
    if( CreateOneAppMutex (_T("sudami")) == NULL)
    {
        ::MessageBox(
            NULL,
            _T("There is already one instance running now..."),
            _T("- -"),
            MB_OK | MB_ICONHAND
            );
        
        exit (0);
    }
2008-5-5 14:12
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
3
汗,切换用户的,俺还没接触过。

抱歉~~~
2008-5-5 14:16
0
雪    币: 5033
活跃值: (3434)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
4
谢谢,sudami,这种方法在同一用户下可以,切换用户后不能实现互斥。
2008-5-5 15:58
0
雪    币: 289
活跃值: (363)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
检测类名标题名,但是很容易被修改掉。
特征检测。程序一运行在某处查找是否有XX文件。有的话就退出。没有新建。程序正常退出别忘了del······
很笨。
我没有具体实现过。。等待大大来解答呵呵。。
2008-5-5 18:00
0
雪    币: 216
活跃值: (2407)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
6
运行后建立一个空文件,已独占方式打开着.退出后关闭文件句柄.
另一个进程运行后 如果建立文件失败,那么就是已经运行了,退出即可.
2008-5-5 18:14
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
127.0.0.1的listen可能更简单一些
2008-5-6 14:10
0
游客
登录 | 注册 方可回帖
返回
//