zoukankan      html  css  js  c++  java
  • Windows查看所有进程中所有使用某一特定dll的进程,找到并杀死进程

    公司程序需要程序卸载后删除某个特定dll,这个dll会被其他程序调用,即使regsvr32 /u以后还有可能被很多程序占用,这种情况底下这段代码就帮了大忙了。不过目前用不了,我们的程序很有可能被Word在占用,突然关闭word导致用户的文档没有保存就被关闭了,有点太影响使用体验了,这个方案先保留

    这个方法的基本思路是遍历进程,拿到进程的句柄后遍历进程中使用的模块的名字,跟我删除的dll的名字对比符合,即中断进程,然后依次往复关掉所有在占用此dll的进程。

    #include <windows.h>
    #include <iostream>
    #include <tlhelp32.h>
    using namespace std;
    
    
    
    bool traverseProcesses(WCHAR *szModule)
    {
        PROCESSENTRY32 pe32;
        pe32.dwSize = sizeof(pe32);
        
        HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if (hProcessSnap == INVALID_HANDLE_VALUE)
        {
            printf("创建进程快照失败");
            return 0;
        }
        BOOL bResult = Process32First(hProcessSnap, &pe32);
        int num(0);
        while (bResult)
        {
            MODULEENTRY32 te = { sizeof(te) };
            HANDLE hmoudleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe32.th32ProcessID);
            BOOL bRet = Module32First(hmoudleSnap, &te);
    
            while (bRet) 
            {
                if (0 == memcmp(szModule, te.szModule, wcslen(szModule)))
                {
                    cout << "[" << ++num << "] : " << "ProcessName:" << pe32.szExeFile << "  " << "ProcessID:" << pe32.th32ProcessID << endl;
                    HANDLE ProcessKill = OpenProcess(PROCESS_TERMINATE, FALSE, pe32.th32ProcessID);
                    TerminateProcess(ProcessKill, 0);
                    CloseHandle(ProcessKill);
                    break;
                }
                bRet = Module32Next(hmoudleSnap, &te);
            }
            CloseHandle(hmoudleSnap);
            bResult = Process32Next(hProcessSnap, &pe32);
        }
        CloseHandle(hProcessSnap);
    
        return true;
    }
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        traverseProcesses(L"111(1).docx");
        system("pause");
        return 0;
    }
  • 相关阅读:
    基于Hadoop的数据仓库Hive
    hadoop课堂测试之数据清洗
    实验6:Mapreduce实例——WordCount
    暑期--第五周
    暑期--第四周
    暑期--第三周
    暑期--第二周
    软件工程——个人课程总结
    周计划03(20201005-20201011)
    周计划02(20200928-20201004)
  • 原文地址:https://www.cnblogs.com/suxia/p/13163094.html
Copyright © 2011-2022 走看看