Windows下Qt使用共享内存的保镖程序

使用共享内存的保镖程序

最近需要对程序加一个保护机制,为了能够持续运行而编写一个保镖程序,保镖程序的功能就是启动被保护的程序。
平台:Win10
对于共享内存,大家都知道常用于进程通信,本篇文章其实也是简易的进程通信。这个保护机制的需求下来以后,我的第一个思路就想到了共享内存,毕竟之前为了让主程序启动唯一性,就用了共享内存来判断,这时候正是扩展其应用的时候。
先来看一段我主程序main函数的开头一段:

QSharedMemory mem("MainProgram");//最好以改程序名称为命名,定义共享内存mem
if(!mem.create(1))//创建共享内存mem,如果该共享内存已存在,则退出
{
   return 0;
}

然后看一段我保镖程序main函数的一段:

QSharedMemory mem("Protector");//以系统exe名称为参数,定义共享内存mem
if(!mem.create(1))//创建共享内存mem,如果该共享内存已存在,则退出
{
    return 0;
}

这样两块共享内存创建完毕,分别命名为MainProgram和Protector。这段也可以防止程序重复运行。
这时候两个程序都开一个线程检测该共享内存块是否存在即可。若不存在则开启对方。

void BlackProtecter::run()
{
    if(NULL == checkMemory) 
    {
        checkMemory = new QSharedMemory("Protector");	// 保镖程序这块为 MainProgram
    }
    while(true)
    {
        if(checkMemory->attach(QSharedMemory::ReadOnly))	// 尝试绑定这块共享内存 若不存在则绑定失败
        {
            checkMemory->detach();	// 解除绑定 给下次绑定使用
        }
        else
        {
            QProcess _temp;
            _temp.start(".\\startp.bat");	// 运行保镖程序的脚本
            _temp.waitForFinished();
        }
        sleep(3);
    }
}

代码只贴了一部分,但是足矣。启动脚本有两个,分别是运行保镖程序和主程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值