是否可以使用WiX变量来避免MAX_PATH限制?

时间:2013-05-14 15:31:34

标签: c# .net path wix wix3.5

我正在WinForms开发一个项目,我正在使用WiX创建安装程序。

但是当安装程序要复制来自非常长的路径的.dll时,Visual Studio会这样说:

'Really long route'\EnterpriseLibrary....\ is too long, the fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.

我发现文章讨论了 MAX_PATH 限制,例如与此Windows API相关的StackOverflow question中所述。

我正在组建一个大团队,我们刚刚发现了这个已知错误,但我们不允许缩短或修改路径。

我之前使用\\?\字符尝试了上述链接所示的解决方案,因此我的WixVariables保持如下:

<?define examplesPath="\\?\$(sys.CURRENTDIR)\..\..\ExamplesFolder" ?>

结果是这样的:

\\?\C:\reallylongpath\files

但它似乎不适用于WiX变量。

所以我的问题是:

有没有办法避免这260个字符的限制?如果是这样,怎么样?

拜托,我需要一个答案!

编辑:在尝试@Jans的建议时,我还发现,如果我将\\?\字符串添加到WiX variable,则错误消息会发生变化。现在它说:

The system cannot find the file '\\?\Reallylongpath\..\..\andreallylongfile\'

我想也许\\?\没有转换我需要使用的..\ ......这里有什么建议吗?

EDIT2:我在msdn上找到了这一行:

A consequence is that \\?\ turns off file name normalization performed by Windows APIs, including removing trailing spaces, expanding ‘.’ and ‘..’

:___(

1 个答案:

答案 0 :(得分:0)

这是一个可怕的黑客,但你可以创建一个真实目录的符号链接。符号链接就像常规链接,除了它的行为与真实目录完全相同。

假设您有一个非常长的目录导致您遇到麻烦:

C:\blahblahblah\thisisreallylong\andnotaccessible\blahblahblah\

你可以为它创建一个符号链接,它有你喜欢的任何名字,但要短得多。把它想象成一个别名。因此,如果您在控制台上调用它,例如在C:\ temp目录中:

C:\temp\>mklink /D reallylong C:\blahblahblah\thisisreallylong\andnotaccessible\blahblahblah\

然后,您可以访问C:\ temp \ reallylong,就好像它是您的真实目录一样。请注意,您需要本地管理员权限才能创建符号链接。