我正在尝试使Windows 10的Addin(使用MAF)AddInProcess.exe(由AddInProcess class创建)“了解长路径”。
困难源于我不拥有AddInProcess.exe的事实。它是.NET Framework的一部分,位于 Jeremy Kuhne的博客 someC:\Windows\Microsoft.NET\Framework64\v4.0.30319\AddInProcess.exe
这是我所做的(根据AppContext
设置为Switch.System.IO.UseLegacyPathHandling
和Switch.System.IO.BlockLongPaths
切换到false
。这使得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 10和AppContextSwitchOverrides
真正得到尊重。我原来是UseLegacyPathHandling
,并且可以解决它。
BlockLongPaths
开头的路径(因为这会导致路径长度检查被跳过))来获取无法开始工作的方法。请参阅[C0 ]博客条目。但是,这种方法将是一个更大/更冒险的尝试(尝试查找所有当前会出现的,可能引发并修改路径并阻止未来开发人员添加新用法的代码出现)this problem\\?\