CreateProcess与没有扩展名的文件的奇怪行为

use*_*607 2 winapi

我注意到了这种行为:

当前目录中有2个可执行文件,名为"somefile"和"somefile.abc".

CreateProcessA(NULL, "somefile", ...)- 失败,错误代码为2(ERROR_FILE_NOT_FOUND)

CreateProcessA(NULL, "somefile.abc", ...) - 工作

CreateProcessA(NULL, ".\\somefile", ...) - 工作

CreateProcessA(NULL, ".\\somefile.abc", ...) - 工作

因此,当且仅当文件没有扩展名时,看起来".\"是必需的.这种行为背后有逻辑吗?

Ser*_*rov 7

来自MSDN:

如果文件名不包含扩展名,则追加.exe.因此,如果文件扩展名为.com,则此参数必须包含.com扩展名.如果文件名以句点(.)结尾但没有扩展名,或者文件名包含路径,则不附加.exe.

我不知道所记录的行为是否应该被称为"怪异".