大家好!
我现在正在维护一个安装与卸载程序代码。
现在发现以前卸载时没有判断被卸载程序是否正在执行。
现在要求加上这一功能。
不知道需要哪些API。另为要求删除安装路径的文件夹,我想问一下判断文件夹是否为空需要哪些API先此谢过!

解决方案 »

  1.   

    1、获得当前进程列表,然后进行判断。
    2、FindFirst
      

  2.   

    获得当前进程列表需要哪些API
      

  3.   

    // 下面的代码将遍历系统内的所有线程,以便找到此进程的主线程
    HANDLE hThreadSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
    THREADENTRY32 te32 = { sizeof(te32) };
    if(::Thread32First(hThreadSnap, &te32))
    {
    do
    {
    if(te32.th32OwnerProcessID == pe32.th32ProcessID)
    {
    // 找到主线程ID号,关联它到当前项
    m_listPro.SetItemData(nItem, te32.th32ThreadID);
    break;
    }
    }
    while(::Thread32Next(hThreadSnap, &te32));
    }
    ::CloseHandle(hThreadSnap);

    nItem++;

    while(::Process32Next(hProcessSnap, &pe32)); 
      

  4.   

    其实我觉得吧  很多的 应用程序是有窗口存在的  你的窗口肯定有自己的类和名字的吧??你可以用一个 比较简单点的 FindWindow来 寻找 有没有你的窗口 如果有的话 就得到他的 进程  然后结束 就可以了
    从窗口句柄得到进程的方法那一个 HWND hwnd=::FindWindow(类名,窗口名);
    DWORD pid;
    ::GetWindowThreadProcessId(hwnd,&pid);
    HANDLE handle=::OpenProcess( PROCESS_ALL_ACCESS, 0,pid);
    ::TerminateProcess(handle,0);