安全地获得在Windows API中运行可执行文件的path

嘿,我试图得到一个DLL位于与我的EXE文件相同的文件夹的path。 要走的道路似乎是使用QueryFullProcessImageName()GetModuleFileName()来获取正在运行的可执行文件的path,然后使用string操作来使其成为所需库的path。

不幸的是,这两个函数都没有提供一种方法来提前找出所需的大小缓冲区。 我已经尝试了为nSizeparameter passing零,但是这不具有所需的效果。

这样做的最佳做法是什么?

实际上,您可以使用Windows API MAX_PATH作为缓冲区大小,为了额外的安全性,可能会添加1。

理论上 ,Windows路径可能更大。 正如我记得MAX_PATH是270或左右,而在NTFS文件系统中,路径可以达到(大约)32767个字符左右。 但是,对于那么大的尺寸,它必须作为Unicode处理,而且重要的是,Windows资源管理器不支持这么大的路径,所以在实践中这不是问题。

在实践中,如果你遇到这么大的路径,显然是不可能删除的,那么你可以使用Unicode命名(有一个特殊的前缀用于长路径),和/或等效的短名称(DOS 8.3名称) /或定义逻辑驱动器来缩短路径,以便目录/文件可以被删除。

干杯&hth。,

GetmoduleeFilename返回复制到缓冲区的字符数。 如果它小于你的缓冲区的大小,你没事。 如果它等于你的缓冲区的大小,分配一个更大的缓冲区,然后再试一次。