windows启动单个进程实例(系统中只有一个运行实例)

简介: windows启动单个进程实例(系统中只有一个运行实例)

我们写的程序一般都是可以多次运行的,就比如我随便打开的这个程序,我们一直双击,它会一直启动:

image.png

但是有时候哦我们只需要一个进程实例,那我们该怎么办呢?一个进程实例具体是什么时候啊?来看一下Windows的任务管理器:

image.png

还有我们平时用的PC版那个绿色的社交软件,只要登录一个账号之后,你每次启动进程,你都会发现打开的是已经登录的那个页面,也就是无法同时登录两个账号(ps: 特殊方法除外)。那我们自己写的程序要做到这一点,是否有难度呢?其实是比较简单的,只需要你对windows编程有一些基础的了解即可。接下啦手把手带大家写一个程序,只能启动一个实例,先说一下环境,我是拿vs写的,默认编码是UNICODE字符集,如果照着我的代码写,编译报错,可以看看字符集的问题:


我们拿简单的console程序距离,主要是说一下用法,首先我们来创建一个GUID,GUID的创建可以使用vs自带的工具,也可以自己网上去查找其它的创建方法,GUID是唯一身份标识码,就和我们身份证ID一样,唯一的。

image.png

#include<iostream>
#include<windows.h>
int main(int argc, LPWSTR* argv)
{
//创建一个互斥体,带有GUID的,如果成功,则返回有效句柄值 GUID是我们通过vs刚生成的
  HANDLE mutexHandle = CreateMutexW(NULL, FALSE, L"Global\\{66451FDE-56B1-406A-9810-D6B372BAE28E}");
  if (ERROR_ALREADY_EXISTS == GetLastError()) 
  {
  if (mutexHandle) {
    CloseHandle(mutexHandle);
  }
  MessageBox(NULL, "exist", "single", NULL);
  goto exit;
  }
  std::cout << "starting" << std::endl;
exit:
  return 0;
}

最后的运行效果如下图所示:

image.png


大家可以尝试在这个基础之上改一下这个demo,让它变成,如果程序已经运行就把程序重新加载起来(类似刷新的效果),就好像,打开任务管理器一样的效果,祝大家修改顺利!


其中虽然代码少,但是涉及到windows开发的两个重要基础知识,句柄和互斥体对象,如果大家想了解,那我就后期更新一下这两个小知识点。


目录
相关文章
|
4月前
|
监控 关系型数据库 MySQL
在CentOS系统中,如何统计哪个进程打开了文件描述符?
利用上述方法,你可以有效地监控和统计CentOS系统中的进程打开的文件描述符数量,以帮助排查错误或优化系统配置。通过组合使用各种工具和命令,可以获得对系统状态和行为的深入了解,进而做出相应的调整和
233 5
|
5月前
|
运维 安全 Linux
【清爽加速】Windows 11 Pro 24H2-Emmy精简系统
“清爽加速”Windows 11 Pro 24H2 针对老旧或低配设备,通过精简系统、优化服务与简化装机流程,降低资源占用,提升运行流畅度,兼顾安全性与稳定性,让老设备也能轻松应对日常办公与轻度娱乐需求。
332 1
【清爽加速】Windows 11 Pro 24H2-Emmy精简系统
|
5月前
|
安全 搜索推荐 开发者
【适度精简】Windows 7 旗舰版-emmy精简系统
Windows 7旗舰版因硬件占用高、冗余组件多、兼容性差及缺乏安全更新等问题,逐渐难以满足用户需求。适度精简版通过去除无用组件、优化性能与安全性,提升老旧设备运行效率,增强兼容性与稳定性,同时保留用户熟悉的操作界面,降低学习成本,满足个性化需求,延续Windows 7的实用价值。
316 2
|
5月前
|
安全 数据安全/隐私保护 Windows
ZyperWin++使用教程!让Windows更丝滑!c盘飘红一键搞定!ZyperWin++解决系统优化、Office安装和系统激活
ZyperWin++是一款仅5MB的开源免费Windows优化工具,支持快速优化、自定义设置与垃圾清理,兼具系统加速、隐私保护、Office安装等功能,轻便无广告,小白也能轻松上手,是提升电脑性能的全能管家。
1753 0
|
7月前
|
Linux 虚拟化 iOS开发
VMware Fusion 13.6.4 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式
VMware Fusion 13.6.4 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式
850 3
|
6月前
|
Ubuntu Linux Windows
windows11系统安装ubuntu系统详细步骤
安装后,您可以直接从商店启动应用程序来源
1310 0
|
7月前
|
持续交付 Windows
如何使用Sysprep准备Windows系统并使用自动应答
通过Sysprep准备Windows系统,可实现SID重置与系统定制。进入Sysprep后,可安装软件、设置默认桌面文件,并使用Windows SIM创建应答文件以实现自动化部署。适用于系统克隆与批量部署场景。
|
11月前
|
Linux 数据库 Perl
【YashanDB 知识库】如何避免 yasdb 进程被 Linux OOM Killer 杀掉
本文来自YashanDB官网,探讨Linux系统中OOM Killer对数据库服务器的影响及解决方法。当内存接近耗尽时,OOM Killer会杀死占用最多内存的进程,这可能导致数据库主进程被误杀。为避免此问题,可采取两种方法:一是在OS层面关闭OOM Killer,通过修改`/etc/sysctl.conf`文件并重启生效;二是豁免数据库进程,由数据库实例用户借助`sudo`权限调整`oom_score_adj`值。这些措施有助于保护数据库进程免受系统内存管理机制的影响。
|
11月前
|
Linux Shell
Linux 进程前台后台切换与作业控制
进程前台/后台切换及作业控制简介: 在 Shell 中,启动的程序默认为前台进程,会占用终端直到执行完毕。例如,执行 `./shella.sh` 时,终端会被占用。为避免不便,可将命令放到后台运行,如 `./shella.sh &`,此时终端命令行立即返回,可继续输入其他命令。 常用作业控制命令: - `fg %1`:将后台作业切换到前台。 - `Ctrl + Z`:暂停前台作业并放到后台。 - `bg %1`:让暂停的后台作业继续执行。 - `kill %1`:终止后台作业。 优先级调整:
981 5
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能

热门文章

最新文章