windows环境下根据进程名杀死进程 并重新拉起


#include <Tlhelp32.h>
    #include <windows.h>
    #include <tlhelp32.h>
    #include "psapi.h"
#include <Tlhelp32.h>
void terminateMYSQL()
{
    HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 
           //现在我们获得了所有进程的信息。
       //将从hSnapShot中抽取数据到一个PROCESSENTRY32结构中
       //这个结构代表了一个进程,是ToolHelp32 API的一部分。
       //抽取数据靠Process32First()和Process32Next()这两个函数。
       //这里我们仅用Process32Next(),他的原形是:
       //BOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);
       //我们程序的代码中加入:
       PROCESSENTRY32* processInfo=new PROCESSENTRY32;
       // 必须设置PROCESSENTRY32的dwSize成员的值 ;
       processInfo->dwSize=sizeof(PROCESSENTRY32);
       int index=0;
       //这里我们将快照句柄和PROCESSENTRY32结构传给Process32Next()。
       //执行之后,PROCESSENTRY32 结构将获得进程的信息。我们循环遍历,直到函数返回FALSE。
       //printf("****************开始列举进程****************/n");
       int ID = 0;
       while(Process32Next(hSnapShot,processInfo)!=FALSE)
       {
           index++;
           //printf("****************** %d ******************/n",index);
           //printf("PID       Name      Current Threads/n");
           //printf("%-15d%-25s%-4d/n",processInfo->th32ProcessID,processInfo->szExeFile,processInfo->cntThreads);
           int size=WideCharToMultiByte(CP_ACP,0,processInfo->szExeFile,-1,NULL,0,NULL,NULL);
           char *ch=new char[size+1];
           if(WideCharToMultiByte(CP_ACP,0,processInfo->szExeFile,-1,ch,size,NULL,NULL))
           {
               if(strstr(ch,"mysqld.exe"))//使用这段代码的时候只需要改变".exe".将其改成你要结束的进程名就可以了。
             {
                    ID = processInfo->th32ProcessID;
                   // qDebug()<<"ID ="<<ID;
                    HANDLE hProcess;
                    // 现在我们用函数 TerminateProcess()终止进程:
                    // 这里我们用PROCESS_ALL_ACCESS
                    hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,ID);
                    //if(hProcess==NULL)
                    //{
                      //  printf("Unable to get handle of process: ");
                      //  printf("Error is: %d",GetLastError());
                    //}
                    TerminateProcess(hProcess,0);
                    CloseHandle(hProcess);
               }
           }
       }
       CloseHandle(hSnapShot);
       delete processInfo;
}
 
 
QString Exe_Path = cfg.getSet()->value("EXE_PATH").toString();
QProcess *process =new QProcess(this);
process->start(Exe_Path);
if(!process->waitForStarted())
{
return;
};
QString strResult = QString::fromLocal8Bit(process->readAllStandardOutput());


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM