首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >获取运行过程中改名的文件的路径

获取运行过程中改名的文件的路径

作者头像
mzlogin
发布2020-04-16 15:11:33
1.7K0
发布2020-04-16 15:11:33
举报
文章被收录于专栏:闷骚的程序员闷骚的程序员

需求

一个 EXE 在运行过程中(被)改名了,需要准确地获取它的文件名。

尝试

原本以为这是一个非常简单的 CASE,直接用 GetModuleFileName 不就行了吗?结果还真不如我所想。无论程序运行过程中被改名成什么样子,GetModuleFileName 返回的都是 EXE 开始运行时的名字。然后又尝试了 GetProcessImageFileName,也是如此,直到最后找到了 QueryFullProcessImageName。

示例代码

#include <Windows.h>
#include <Psapi.h>
#include <stdio.h>

#pragma comment(lib, "Psapi.lib")

void OutputSelfpath()
{
	char szFile[MAX_PATH] = {0};
	GetModuleFileName(NULL, szFile, MAX_PATH);
	printf("GetModuleFileName:\n\r%s\n\n", szFile);

	memset(szFile, 0, MAX_PATH);

	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
	if (!hProcess)
	{
		printf("OpenProcess failed!\n");
	}
	else
	{
		DWORD dwRet = GetProcessImageFileName(hProcess, szFile, MAX_PATH);
		if (dwRet)
		{
			printf("GetProcessImageFileName:\n\r%s\n\n", szFile);
		}
		else
		{
			printf("GetProcessImageFileName failed!\n");
		}

        memset(szFile, 0, MAX_PATH);
		DWORD dwSize = MAX_PATH;
		if (QueryFullProcessImageName(hProcess, 0, szFile, &dwSize))
		{
			printf("QueryFullProcessImageName:\n\r%s\n\n", szFile);
		}
		else
		{
			printf("QueryFullProcessImageName failed\n", szFile);
		}
	}
}

int main()
{
	const char* pszFile = "ConsoleTest.exe";
	const char* pszNewFile = "ConsoleTest_bak.exe";
	remove(pszNewFile);

	OutputSelfpath();

	int nRet = rename(pszFile, pszNewFile);

	if (0 != nRet)
	{
		printf("rename file failed!\n");
	}
	else
	{
		printf("################### after rename ###################\n\n");
		OutputSelfpath();
	}

	system("pause");
	return 0;
}

运行结果

QueryFullProcessImageName
QueryFullProcessImageName

思考

现象上讲就是如此了,这几个 API 的本质区别是什么呢?待续。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014/10/09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求
  • 尝试
  • 示例代码
  • 运行结果
  • 思考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档