关闭使用ShellExecute打开的进程
关闭使用ShellExecute打开的进程
最近做一个项目使用到ShellExecute来打开一个带参数的外部exe文件,关闭时遇到不少问题,最终解决,总结如下。
对于关闭ShellExecute打开的进程窗口,网上比较多的是用FindWindow方式,可惜我也不知道这窗口的名称。通过查询资料找到以下方式可以关闭进程:
// lpProcessName为打开的进程名称 带文件类型后缀 如:****.exe
void CloseProcess(LPCTSTR lpProcessName);
{
DWORD dwQQID = GetProcessID(lpProcessName);
HANDLE hProecss = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwQQID); //打开进程
if(hProecss)
{
TerminateProcess(hProecss, 0); //关闭进程
}
CloseHandle(hProecss);
}
// 遍历进程,得到进程ID
DWORD GetProcessID(LPCTSTR lpProcessName)
{
//创建进程快照
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hSnapshot != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 pe32 = {0};
pe32.dwSize = sizeof(pe32);
// 拿到第一个进程信息
if(!Process32First(hSnapshot, &pe32))
{
CloseHandle(hSnapshot);
return FALSE;
}
do
{
int nLen = _tcslen(lpProcessName);
int nLen2 = _tcslen(pe32.szExeFile);
if(nLen != nLen2)
{
continue;
}
//if(_tcscmp(lower(lpProcessName), lower(pe32.szExeFile)) == 0)
if(_tcscmp(lpProcessName, pe32.szExeFile) == 0)
{
return pe32.th32ProcessID;
}
} while (Process32Next(hSnapshot, &pe32));
}
return 0;
}
后来应用时发现在Win7系统关闭exe进程没有问题,但在winXP系统时关闭进程失败。
经测试是调用OpenProcess()返回0,GetLastError()返回的错误代码为5,表示访问拒绝,权限不够!
BOOL ProcessPrivilege(BOOL bEnable)
{
BOOL bResult = TRUE;
HANDLE hToken=INVALID_HANDLE_VALUE;
TOKEN_PRIVILEGES TokenPrivileges;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,
&hToken) == 0)
{
printf("OpenProcessToken Error: %d\n",GetLastError());
bResult = FALSE;
}
TokenPrivileges.PrivilegeCount = 1;
TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&TokenPrivileges.Privileges[0].Luid);
AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
if(GetLastError() != ERROR_SUCCESS)
{
bResult = FALSE;
}
CloseHandle(hToken);
return bResult;
}
在CloseProcess()函数的第一行加入ProcessPrivilege(TRUE),关闭成功!
关闭使用ShellExecute打开的进程相关推荐
- CMD 命令行查看端口被哪个程序占用,并根据PID值,找到相应的程序,关闭掉对应服务或进程!...
CMD 命令行查看端口被哪个程序占用,并根据PID值,找到相应的程序,关闭掉对应服务或进程! 不用任何第三方软件的情况下,打开CMD执行如下命令:1,netstat -ano 你可以查看到Local ...
- 各个系统下关闭占用端口号的进程
各个系统下关闭占用端口号的进程 以8080端口为例 Windows win + R --> cmd netstat -ano | findstr 8080 查询到的最后一列即为对应进程的PID ...
- jenkins 安装以及Jenkins无法在界面关闭跨站请求伪造保护(CSRF)解决403以及如何关闭Jenkins杀掉所有衍生进程
Jenkins的安装可以通过tomcat作为容器安装,由于Jenkins包就自带了servlet,所以我们只需要下载安装就可以直接启动. 1.下载war包: 官方地址下载:http://mirrors ...
- Linux如何关闭某个占用端口的进程
目录 Linux如何关闭某个占用端口的进程 1)查找被占用的端口: 2)查看被占用端口的PID: 3)kill掉该进程 Linux如何关闭某个占用端口的进程 1)查找被占用的端口: netstat - ...
- 如何关闭docker容器里的进程
如何关闭docker容器里的进程 1.使用docker exec 容器名 ps -ef命令查看进程信息 示例: 创建名为"redis"的容器,并在容器内部和宿主机中查看容器中的进程 ...
- 怎样打开mysql进程数_mysql查看最大打开进程数
今天在群里刚刚知道这个查看打开最大进程数的命令,下面来看一下吧~ cat /proc/27095/limits | grep Max open files 查看mysql最大打开进程数的命令 我们应该 ...
- linux shell脚本关闭指定端口号的进程
关闭指定进程中关键词的进程,最好找一个唯一标识 例如:项目名称 等等 文章目录 一.管道方式 1. 关闭指定程序进程号 2. 关闭指定端口号的进程(推荐使用) 3. 关闭指定进程关键词的进程(推荐使用 ...
- Win10计算机窗口空白,Win10系统下启用或关闭windows功能打开后显示空白如何解决...
最近有win10系统用户在打开启用或关闭windows功能要进行操作的时候,发现打开后显示一片空白,导致无法任何操作,该怎么办呢,本文就给大家讲解一下Win10系统下启用或关闭windows功能打开后 ...
- 单位办公电脑声音和摄像头被关闭,如何打开笔记本麦克风和摄像头。
单位办公电脑声音和摄像头被关闭,如何打开笔记本麦克风和摄像头. 笔记本电脑摄像头或者麦克风无法使用 摄像头和麦克风隐私权限被关闭 检查是否具有用户权限(麦克风和摄像头使用同样的方法). Win10 麦 ...
最新文章
- 【机器学习】24个终极项目提升您的机器学习知识和技能
- PHP关于curl_setopt几个参数设置的说明
- book: Effective Java
- 你怕是对MD5算法有误解
- centos java 乱码_CentOS 7.4 java验证码乱码的问题
- ACM 学习笔记(六) 图论
- BAT-把当前用户以管理员权限运行
- QQ客服代码(支持临时会话设置)
- 单片机项目开发设计 - 器件选型原则根据、常用单片机资源配置要点(GPIO、SPI、IIC、ADC)
- 动态规划基础之挖金矿问题
- C# winform 界面美化技巧(扁平化设计)
- 读书笔记--关键对话
- dell计算机一直重启,dell开机无限循环重启如何处理
- 群晖web文件服务器docker,群晖docker搭建数据库服务器
- linux输入密码后提示密码错误,用sudo命令没有提示输入密码,而是出现sudo:3次错误密码尝试的解决...
- 使用pyhton采用多线程方式ping IP
- QCon旧金山2016大会,议题发布及研讨会一瞥
- Ubuntu系统桌面版安装
- np.title函数作用
- 服务器显示post是什么意思,post请求 post请求是什么