我正在尝试在Windows Vista Ultimate计算机上构建Firefox。我一直收到以下错误:
nsinstall:错误的文件编号
我读过这个错误是因为Vista中的UAC引起的。这两篇文章引导我得出这个结论。 https://wiki.mozilla.org/Penelope_Developer_Page#Windows_Vista和http://www.kevinbrosnan.net/mozilla-build-error-nsinstall-bad-file-number
使用标准的“以管理员身份运行”,我试图重做我的构建,但我得到完全相同的错误。我还以管理员身份启动了正常的命令提示符,然后转到mozilla-build(start-msvc8.bat)中的批处理文件并运行它。在同一点上,同样的错误仍然存在。
关于我如何解决此错误或其他可能导致错误的任何其他见解?
注意:我也posted something here希望获得针对特定主题的帮助,但我没有听到过窥视......在我发布之后,我发现了{{{ 1}}。无论如何,我更喜欢所以我想我会在这里尝试......
更新:我已尝试完全禁用UAC来纠正问题,正如cnemelkasr所建议的那样。我收到了完全相同的错误。这个新知识让我觉得文件或文件夹丢失了......有没有NSInstall经验的人都知道给定的错误 - 文件号错误 - 可能意味着什么?我想它可能是指文件句柄......
答案 0 :(得分:0)
如果确实是UAC错误,您可以尝试完全关闭UAC。我必须为几个包做这个。网上有很多地方可以获得这方面的指示。
http://www.petri.co.il/disable_uac_in_windows_vista.htm就是其中之一。
答案 1 :(得分:0)
我找到了问题的答案。我在这里发布答案,与其他人分享答案并结束这个问题。
禁用UAC后,有人建议目录深度干扰NSInstall。我将文件夹从c:/Users/Frank/Documents/hg-repos/firefox-src-hgRepo/mozilla-fv-expirement/
移到了C:/mozilla-fv-expirement/
。清除所有以前的构建尝试,最后重新构建我的构建(关闭UAC),我收到了一个有效的调试二进制文件。
该建议发布于:mozilla.dev.builds
答案 2 :(得分:0)
在我看到的情况下,"错误的文件编号" 消息是由传递给execvp (command, argv)
(或类似)函数的过多参数引起的。但只能来自一些程序。您 PATH 中的旧 bash , sh 或Borland / Watcom程序可能是候选人。
因此,当您缩短构建目录的名称时,命令行的总大小(最终传递给CreateProcess()
)会变短。我不认为UAC与此有任何关系,因为我也在Win-XP上看过这个。但是有点奇怪Mozilla在构建时不会使用相对路径。我猜它在它的makefile中使用了一些目录前缀值(我从未尝试过构建它)。
如果您查看_execvp()
的文档:
http://msdn.microsoft.com/en-us/library/3xw6zy53.aspx
E2BIG 是可能的errno
值之一:
参数和环境设置所需的空间超过32 KB。
现在,这是一个奇怪的部分。
事实1 :
在Visual-C / MingW(任何版本)上,strerror(EBADF)
不会返回"错误的文件编号" 。
(它返回"错误的文件描述符")。
事实2 :
在Borland的CBuilder 5.6和Watcom 1.9上(这些不使用MSVC运行时),strerror(EBADF)
确实返回&#34;错误的文件编号&#34; < / i>的。
理论的:
有可能Borland,Watcom(以及其他CRT也是如此?)混淆了E2BIG
和EBADF
的含义。这有什么意义吗?如果你有更好的理论,请有人纠正我。
我自己有点困惑......
结论:
缩短环境的大小(最简单)或缩短命令行(并非总是容易)。
- GV