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