环境:win10 64位操作系统 VS2012编程
代码如下:
头文件
#include "stdafx.h"
#include "GetprocessPath.h"
#include "GetprocessPathDlg.h"
#include "afxdialogex.h"
#include <Psapi.h>
#include "tlhelp32.h"
#pragma comment (lib,"Psapi.lib")主要源代码void CGetprocessPathDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码 CString processFullPath;
CString processname1=_T("CCProjectMgr.exe");
GetProcessidFromName(processname1,processFullPath);//由进程名获取进程路径
AfxMessageBox(processFullPath);//显示进程路径
CDialogEx::OnOK();
}
//-------------------------------获取进程路径函数-----------------------------------------------//
DWORD CGetprocessPathDlg::GetProcessidFromName(CString processName,CString &processPath){
PROCESSENTRY32 pe;
MODULEENTRY32 me;
//LPMODULEENTRY32 me;
DWORD id=0;
HANDLE mehandle;
HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize=sizeof(PROCESSENTRY32);
BOOL ret=Process32First( hSnapshot,&pe);
if(!ret)
return 0;
while(1)
{
pe.dwSize=sizeof(PROCESSENTRY32);
if(Process32Next(hSnapshot,&pe)==FALSE)
break;
if(processName.CompareNoCase(pe.szExeFile)==0)
{
id=pe.th32ProcessID;
CString myfilename;
myfilename=pe.szExeFile;
AfxMessageBox(myfilename);
mehandle=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,id);
me.dwSize=sizeof(MODULEENTRY32);
Module32First(mehandle,&me);
processPath=me.szExePath;
AfxMessageBox(GetLastError());//测试问题
break;
}
}
CloseHandle(hSnapshot);
return id;
}问题:
编绎的后运行程序,获取路径空或未初始化。获取最后错误显示,但在调试时显示路径正常。获取最后错误显示
Debug Assertion Failed!
Program:C:\WINDOWS\SYSTEM32\mfc110ud.dll
File:f\dd\vctools\vc7libs\ship\atlmfc\src\mfc\appui1.cpp
line:162
For information on how your program can causr an assertion failure,see the visual c++ documentation on asserts
小弟菜鸟一个,求高人指点!
代码如下:
头文件
#include "stdafx.h"
#include "GetprocessPath.h"
#include "GetprocessPathDlg.h"
#include "afxdialogex.h"
#include <Psapi.h>
#include "tlhelp32.h"
#pragma comment (lib,"Psapi.lib")主要源代码void CGetprocessPathDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码 CString processFullPath;
CString processname1=_T("CCProjectMgr.exe");
GetProcessidFromName(processname1,processFullPath);//由进程名获取进程路径
AfxMessageBox(processFullPath);//显示进程路径
CDialogEx::OnOK();
}
//-------------------------------获取进程路径函数-----------------------------------------------//
DWORD CGetprocessPathDlg::GetProcessidFromName(CString processName,CString &processPath){
PROCESSENTRY32 pe;
MODULEENTRY32 me;
//LPMODULEENTRY32 me;
DWORD id=0;
HANDLE mehandle;
HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize=sizeof(PROCESSENTRY32);
BOOL ret=Process32First( hSnapshot,&pe);
if(!ret)
return 0;
while(1)
{
pe.dwSize=sizeof(PROCESSENTRY32);
if(Process32Next(hSnapshot,&pe)==FALSE)
break;
if(processName.CompareNoCase(pe.szExeFile)==0)
{
id=pe.th32ProcessID;
CString myfilename;
myfilename=pe.szExeFile;
AfxMessageBox(myfilename);
mehandle=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,id);
me.dwSize=sizeof(MODULEENTRY32);
Module32First(mehandle,&me);
processPath=me.szExePath;
AfxMessageBox(GetLastError());//测试问题
break;
}
}
CloseHandle(hSnapshot);
return id;
}问题:
编绎的后运行程序,获取路径空或未初始化。获取最后错误显示,但在调试时显示路径正常。获取最后错误显示
Debug Assertion Failed!
Program:C:\WINDOWS\SYSTEM32\mfc110ud.dll
File:f\dd\vctools\vc7libs\ship\atlmfc\src\mfc\appui1.cpp
line:162
For information on how your program can causr an assertion failure,see the visual c++ documentation on asserts
小弟菜鸟一个,求高人指点!
解决方案 »
- 非模态对话框想修改主对话框中的内容
- vc++中如何遍历文件夹里面的文件
- 请问:使用ras的vpn连接是否是基于ipsec的vpn?
- 对话框创建失败原因
- 关于头文件的问题
- 100分求救:关于按钮的按下和弹起
- VC使用ODBC连接SQL Server时为什么对于Text类型的字段,当数据长于300个字节时总是说“数据被截断”?
- 急!!!VC++2008可以正常编译执行(debug/release),就是不能去目录下双击执行。
- 请教关于CListCtrl中单击Header对表中数据排序的实现方法.
- 图像拉伸 算法
- MFC中的webBrowser.Navigate,用它打开一个ppt或者word文档
- MFC 如何判断按钮点击次数
由于在调试模式运行程序时无任何问题,刚开始以为在权限上有问题,在项目属性--链接器--清单文件UAC级别设置成requireAdministrator (/level='requireAdministrator'),运行时依然存在问题。看来与权限无关。也用过GetProcessImageFileName/EnumProcessModule等函数来获取都不成功。有点奇怪的是有一两交居然能正常运行。今天晚上用网上64位32位进程路径获取办法(DosPathToNtPath(LPTSTR pszDosPath, LPTSTR pszNtPath)和GetProcessFullPath(DWORD dwPID, TCHAR pszFullPath[MAX_PATH])在DOS下查看全部路径,居然没有我要的进程。因此我更换另一个进程来获取,次次都能正常获取全路径,获取这个程序路径时显示如图路径(空),百思不得其解。如果它加密,应该也不能通过 任务栏进程列表,通过点击右键看到路径,而且偶尔能获取正确的路径。求高人指点。
tasklist这个命令能查看到进程名称,我用程序也能获取名称,但就是无法获取路径,能告诉我是什么原因导致的吗?