5

首先,我想说我不是指完整路径,
GetModuleFileName 或 argv[0] 产生什么。有没有比在最后一个反斜杠之前忽略所有内容更聪明的解决方案?

4

3 回答 3

17

GetModuleFileName首先,您希望通过调用传递NULL作为模块句柄来获取可执行文件的完整路径。然后调用PathFindFileName拉出文件名组件。

和之间其实是有区别GetModuleFileNameargv[0]。后者是用于启动进程的名称。它可能缺少完整路径,但更重要的是,它可能缺少.exe扩展名。如果您想知道实际的文件名,那么您需要使用GetModuleFileName.

于 2012-05-13T14:46:22.663 回答
0

如果您使用 .NET,那么这里有一个答案。但在内部它可能正在调用GetModuleFileName.

于 2012-05-13T14:39:10.203 回答
0

在 Windows C/C++ 中,有一个extern char * _pgmptr可以读取的全局变量以及来自_get_pgmptr(char ** buffer).

注意事项

仅当您的程序有一个狭窄的入口点(如 main() 或 WinMain())时才调用_get_pgmptr( )。_pgmptr 全局变量包含与进程关联的可执行文件的完整路径。有关详细信息,请参阅_pgmptr、_wpgmptr

如果 DLL 在两个进程中加载​​,则一个进程中的文件名可能与另一进程中的文件名不同。

全局变量 _pgmptr 自动初始化为可执行文件的全路径,可用于检索可执行文件的全路径名。

于 2019-09-17T15:03:10.860 回答