如何通过C ++可执行文件中的清单启用“长路径感知”行为?

时间:2018-12-24 22:53:52

标签: c++ visual-studio visual-studio-2017 manifest long-filenames

我正在尝试遵循Microsoft documentation来解除Windows 10下API中MAX_PATH的文件路径限制。它说:

  

您还可以通过启用每个应用的新长路径行为   清单:

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
        <ws2:longPathAware>true</ws2:longPathAware>
    </windowsSettings>
</application>

第一个问题。是否可以在Visual Studio 2017的项目属性中启用它?

第二个问题:我找不到上面的答案,所以我决定走一条手工路线:

  1. 我这样创建了additional.manifest文本文件:

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
            <ws2:longPathAware>true</ws2:longPathAware>
        </windowsSettings>
    </application>
    </assembly>
    
  2. 然后将其添加到项目属性中:

enter image description here

  1. 但是当我编译它时,它给了我这个警告,并且该清单似乎在应用程序运行时不起作用:
  

1> additional.manifest:清单创建警告81010002:   命名空间中无法识别的元素“ longPathAware”   “ http://schemas.microsoft.com/SMI/2016/WindowsSettings”。

那我在做什么错了?

1 个答案:

答案 0 :(得分:-1)

不。 Windows桌面或控制台应用程序的Visual Studio 2017 v15.9.4项目属性中没有启用“长路径感知”的开关。

您在上面链接的Microsoft文档说:

  

从Windows 10版本1607开始,MAX_PATH限制已从常见的Win32文件和目录功能中删除。但是,您必须选择加入新行为。

请确保将使用的配置和当前工具集定位为Windows 10版本1607或更高版本的Windows SDK。您至少需要Windows SDK v10.0.14393.795。当前版本是v10.0.17763.0。

您可以在项目属性的“常规”属性表中找到并更改目标Windows SDK版本和目标工具集。

侧面说明:使整体配置更改在所有配置中均处于活动状态。将属性表的配置选项更改为“所有配置”和“所有平台”,除非您专门针对平台进行了更改。