Windows开启长路径后以长路径为工作目录启动进程失败咨询
问题根因说明
这是Windows长路径支持的已知覆盖范围限制,既不是操作错误,也不属于系统Bug,是现有版本的功能设计导致的问题:
- 你开启的
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled注册表项,仅对支持长路径感知的Win32文件操作API生效,所有语言启动进程底层调用的CreateProcess系列API,在Windows 10 21H2之前的版本,工作目录参数原生不支持长路径,哪怕开启注册表也无法生效,你使用的1909版本正好属于未支持的版本范围。 \\?\长路径前缀对CreateProcess的工作目录参数无效,该参数本身不识别DOS设备前缀格式的路径,传入后会直接被判定为无效路径,该限制在CreateProcess的官方参数说明中有标注,只是长路径总文档未提及该细节,属于文档覆盖遗漏。- 长路径下Git闪退的原因和启动进程报错一致:Git for Windows依赖的旧版msys2运行时未完全适配长路径,且Git运行时会频繁调用子进程,传递工作目录时触发了
CreateProcess的路径长度限制;基础文件操作正常是因为这类操作调用的是已经支持长路径的文件管理API,未触发进程启动的路径限制。
可行解决方案
- 优先升级系统到Windows 10 21H2及以上版本,微软从该版本开始为
CreateProcess系列API补全了工作目录的长路径支持,开启注册表后即可正常传入长路径作为工作目录。 - 无法升级系统的场景下可以绕开工作目录参数:启动进程时不要设置
WorkingDirectory,改为在启动命令中主动切换目录,例如启动PowerShell时把执行命令改为powershell -Command "cd 'C:\Long\Path'; 后续执行逻辑"。 - 临时场景下可以用
subst命令把长路径映射为本地盘符,用映射后的盘符作为工作目录启动进程,使用完成后取消映射即可。
内容的提问来源于stack exchange,提问作者Olivier D
相关产品推荐
相关产品推荐

