使MAF AddInProcess.exe“知道长路径”

问题描述 投票:6回答:1

我正在尝试使Windows 10的Addin(使用MAF)AddInProcess.exe(由AddInProcess class创建)“了解长路径”。

困难源于我不拥有AddInProcess.exe的事实。它是.NET Framework的一部分,位于C:\Windows\Microsoft.NET\Framework64\v4.0.30319\AddInProcess.exe这是我所做的(根据

Jeremy Kuhne的博客

条目.NET 4.6.2 and long paths on Windows 10的指导:]
  • AppContext设置为Switch.System.IO.UseLegacyPathHandlingSwitch.System.IO.BlockLongPaths切换到false。这使得

    some

    .NET API开始接受长路径。但是,调用[ win32进行的调用仍然由于System.IO.DirectoryNotFoundException或其他异常而失败。

接下来我要做[[应]],但是不能编辑应用程序的清单并在下面添加设置。但是,我没有一种(正确的)方法可以做到这一点。如果我
  • 可以
  • 执行此操作,则

    将可以工作。为了证明它可以工作,我做了以下工作:

    使用以下设置创建AddInProcess.exe.manifest,并将其拖放到AddInProcess.exe旁边的目录中。 这不足以提取清单,因为AddInProcess.exe具有嵌入的清单(使用sigcheck.exe检查)和sigcheck.exe。我通过embedded manifests take priority over external manifests解决了这个问题(出于测试目的)。 <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware> </windowsSettings> </application> 的行为,而不仅仅是我创建的行为。

    问题:

    是否有合法的方法使您无法控制(AddInProcess.exe)的进程成为AddInProcess.exe是否可以在运行时更改此清单设置?

    [Notes

    我在组策略编辑器中启用了Win32长路径支持(请参阅longPathAware我很难让.NET 4.6.2 and long paths on Windows 10AppContextSwitchOverrides真正得到尊重。我原来是UseLegacyPathHandling,并且可以解决它。

    • 可以
    • 通过使用
    • 扩展路径
    • (即以BlockLongPaths开头的路径(因为这会导致路径长度检查被跳过))来获取无法开始工作的方法。请参阅[C0 ]博客条目。但是,这种方法将是一个更大/更冒险的尝试(尝试查找所有当前会出现的,可能引发并修改路径并阻止未来开发人员添加新用法的代码出现)
  • 其他参考
  • this problem\\?\

    c# .net windows manifest system.io.file
    1个回答
    0
    投票
    1
    © www.soinside.com 2019 - 2024. All rights reserved.