WinXP下如何获得进程的全路径?

titi_lima 2003-09-02 09:47:34
PROCESSENTRY32结构之中的szExeFile可以在98之中显示进程的全路径,但是在XP之下就不能了。请问诸位高手,如何获得进程的全路径?谢谢!
...全文
318 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yh824 2003-09-05
  • 打赏
  • 举报
回复
后台服务进程事受到操作系统保护的,出于安全性和稳定性的考虑,如果你只通过正常途径是不大可能让你获得他的句柄。
titi_lima 2003-09-05
  • 打赏
  • 举报
回复
OK,那谢谢了,结贴。
titi_lima 2003-09-04
  • 打赏
  • 举报
回复
谢谢诸位热心的解答,我的VC 6.0并没带有psapi.h和psapi.lib,我从VS.net 2003中复制了一份,运行正常。但是仍然无法获得那些系统服务(如svchost.exe等)的全路径,请问如何解决?
titi_lima 2003-09-04
  • 打赏
  • 举报
回复
请大家帮忙!如果分不够可以另开贴加分!
yh824 2003-09-04
  • 打赏
  • 举报
回复
#include "psapi.h", 呵呵~
yh824 2003-09-04
  • 打赏
  • 举报
回复
哦,是这样,#include "psapi" 就OK了
ppyy 2003-09-03
  • 打赏
  • 举报
回复
Requirements
Windows NT/2000: Requires Windows NT 4.0 or later.
Header: Declared in Psapi.h.
Library: Use Psapi.lib.
Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000.
yinx 2003-09-03
  • 打赏
  • 举报
回复
GetModuleFileName 不行么
yh824 2003-09-03
  • 打赏
  • 举报
回复
我最近作了各类似的: (我是获得若干进程的全路径,主要用到CreateToolhelp32Snapshot和GetModuleFileNameEx,path就是全路径,你自己把不要的去掉就可以了)
HANDLE hSnapShot = NULL, hExeFile = NULL;
BOOL bRet = FALSE ;
CString show ;

hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hSnapShot == INVALID_HANDLE_VALUE)
return bRet;

PROCESSENTRY32 info ;
info.dwSize = sizeof(info);

if(Process32First(hSnapShot, &info))
{
if(GetLastError() == ERROR_NO_MORE_FILES )
{
AfxMessageBox("没有进程信息 !") ;
CloseHandle(hSnapShot);
return bRet ;
}
else
{
CString ExeFile, ExePath;
char path[255] ;
memset(path, 0, sizeof(path)) ;

int nCount = arry.GetSize() ;
int nIndex = 0 ;
int pos = 0 ;
for (int i = 0; i < nCount; i++)
{
nIndex = arry.GetAt(i) ;
ExeFile = m_csArry.GetAt(nIndex)->name ;
ExePath = ExeFile ;
pos = ExeFile.ReverseFind('\\') ;
pos = ExeFile.GetLength() - pos - 1 ;
ExeFile = ExeFile.Right(pos) ;

while (Process32Next(hSnapShot, &info))
{
if (ExeFile == info.szExeFile)
{
hExeFile = OpenProcess(PROCESS_ALL_ACCESS, FALSE, info.th32ProcessID);
if(hExeFile != NULL)
{
GetModuleFileNameEx(hExeFile, (HMODULE)(info.th32ModuleID), path, 255) ;
if (ExePath == path)
{
TerminateProcess(hExeFile, 0);
m_list2.SetItemText(nIndex, 1, "未运行") ;
m_list2.SetItemText(nIndex, 2, "") ;
m_csArry.GetAt(nIndex)->flag = false ;
break ;
}
}
}
}
}
bRet = TRUE ;
}
}
else
{
AfxMessageBox(" 系统错误 !") ;
}
CloseHandle(hSnapShot);
return bRet ;
titi_lima 2003-09-03
  • 打赏
  • 举报
回复
To Oversense(步步文):
哪个头文件?我用Find in files...找过了,没找到哦。
谢谢!
Oversense 2003-09-03
  • 打赏
  • 举报
回复
要包含头文件才可以用GetModuleFileNameEx
titi_lima 2003-09-03
  • 打赏
  • 举报
回复
Toyh824(啾啾虫):
为什么在MSDN中可以找到GetModuleFileNameEx,而我的VC 6.0不能使用?
howtotell 2003-09-03
  • 打赏
  • 举报
回复
Masterz的程序的代码在98下编译不过,即使在2k下编译过了在2K下执行也是出错.我试过.
masterz 2003-09-02
  • 打赏
  • 举报
回复
void GetProcessName(DWORD processid,LPTSTR buf,int len)
{
//make sure buf is valid and long enough
if(buf==NULL||len<=0)
return;
buf[0]=0;
if(processid ==8)
{
_tcscpy(buf,"System");
return;
}
if(processid==0)
{
_tcscpy(buf,"System Idle Process");
return;
}
HANDLE hProcess =OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,false,processid);
if(hProcess ==NULL)
{
_tcscpy(buf,"unknown(OpenProcess error)");
return;
}
HMODULE hModule;
DWORD cbReturned;
BOOL bret=EnumProcessModules(hProcess ,&hModule, sizeof(hModule), &cbReturned );
if(bret)
{
DWORD dwret=GetModuleFileNameEx(hProcess ,hModule,buf,len);
//GetModuleBaseName(hProcess,hModule,buf,len);
}
else
_tcscpy(buf,"unknown(GetModuleBaseName error)");
CloseHandle( hProcess ) ;
// GetProcessName2(processid,buf);
}
Kyle_Chen 2003-09-02
  • 打赏
  • 举报
回复
char szPath[_MAX_PATH];
GetModuleFileName(GetModuleHandle(NULL), szPath, _MAX_PATH);
COKING 2003-09-02
  • 打赏
  • 举报
回复
AfxGetApp()->m_pszExeName;
titi_lima 2003-09-02
  • 打赏
  • 举报
回复
唉,顶

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧