c++如何获得正在执行的exe文件路径

c++如何获得正在执行的exe文件路径
c++如何获得正在执行的exe文件路径
c++如何获得正在执行的exe文件路径

如有帮助给个采纳谢谢


#include <iostream>
#include <windows.h>

int main() {
    char buffer[MAX_PATH];
    GetModuleFileName(NULL, buffer, MAX_PATH);
    std::cout << "当前可执行文件路径:" << buffer << std::endl;

    return 0;
}

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7679271
  • 你也可以参考下这篇文章:C++如何打开一个exe文件
  • 除此之外, 这篇博客: C++实现EXE在内存中展开,并用线程运行中的 以0x1000粒度拷贝到内存 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 拷贝过程
    1.拷贝各个头部,即节区头以上的部分。(PE结构中在可选头中有SizeOfHeaders指明了大小)
    2.各个节区块,如下图
    在这里插入图片描述

    	//创建内存空间
    
    	LPBYTE loca = (LPBYTE)VirtualAlloc(NULL,sizeOfImage,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
    
    	//拷贝内存空间
    
    	LPBYTE virseek = (LPBYTE)loca;
    	//拷贝头
    	memcpy(loca,lpBaseAddress,sizeOfHeader);
    	//第一个头拷贝完后要先对齐一下,再进行拷贝
    	if(sizeOfHeader%0x1000!=0)
    	{
    		virseek+=0x1000;
    	}
    	virseek += (sizeOfHeader/0x1000)*0x1000;
    	//拷贝节区块
    	LPBYTE sectionStartAddr = lpBaseAddress+sizeOfHeader;
    	for(int i=0;i<(ntHeader->FileHeader.NumberOfSections);i++,pSectionHeader++)
    	{
    		int sectionSize = pSectionHeader->Misc.VirtualSize/0x1000;
    		if(pSectionHeader->Misc.VirtualSize%0x1000!=0)
    		{
    			sectionSize++;
    		}
    		memcpy(virseek,sectionStartAddr,pSectionHeader->SizeOfRawData);
    		sectionStartAddr+=pSectionHeader->SizeOfRawData;
    		virseek += sectionSize*0x1000;
    	}
    
  • 以下回答由chatgpt基于相关博客总结生成:

    问题回答:

    要获取正在执行的exe文件的路径,可以使用C++标准库中的相关函数和操作系统提供的API来实现。

    1. 首先,使用C++的标准库中的一个函数来获取当前进程的可执行文件路径。在C++中可以使用argcargv参数来获取当前程序的可执行文件路径,这两个参数是用来传递命令行参数的。argv[0]就是当前程序的路径。

    以下是获取当前程序路径的示例代码:

    #include <iostream>
    
    int main(int argc, char* argv[]) {
        std::cout << "Executable file path: " << argv[0] << std::endl;
        return 0;
    }
    
    1. 使用操作系统提供的API来获取当前进程的可执行文件路径。不同的操作系统提供了不同的API来获取当前进程的可执行文件路径,下面列举了几个常见的操作系统的API。

    2. Windows操作系统:可以使用GetModuleFileName函数来获取当前进程的可执行文件路径。

    以下是在Windows操作系统下获取当前程序路径的示例代码:

    #include <iostream>
    #include <windows.h>
    
    int main() {
        char buffer[MAX_PATH];
        GetModuleFileName(NULL, buffer, MAX_PATH);
        std::cout << "Executable file path: " << buffer << std::endl;
        return 0;
    }
    
    • Linux操作系统:可以使用readlink函数来获取当前进程的可执行文件路径。

    以下是在Linux操作系统下获取当前程序路径的示例代码:

    #include <iostream>
    #include <unistd.h>
    
    int main() {
        char buffer[1024];
        readlink("/proc/self/exe", buffer, sizeof(buffer));
        std::cout << "Executable file path: " << buffer << std::endl;
        return 0;
    }
    

    以上就是获取正在执行的exe文件路径的几种方法。根据当前操作系统和需求选择适合的方法来实现。