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;
    }
  • 相关阅读:
    C#字符串常见处理
    应用各种领域逻辑模式组织业务逻辑层
    谈谈C#的异常处理机制
    android适配器Adapter
    Struts+Tomcat搭建
    Android特性与系统架构
    常用控件应用之文本框(TextView)特效
    Activity中与ListActivity中使用listview区别
    Android四大基本组件介绍与生命周期
    ftp原理
  • 原文地址:https://www.cnblogs.com/suxia/p/13163094.html
Copyright © 2011-2022 走看看