2014-11-04 79 views
2

所以我一直在尝试使用NSIS为我的游戏构建一个安装程序。大多数情况下,它工作正常,但只是注意到,它似乎无缘无故地跳过某些文件。或者没有理由我能弄清楚。NSIS安装程序在编译时无法找到现有文件

起初我是用这条线收拾源文件夹中的所有文件:

File /r "${NSISDIR}\game\source\*.*" 

然而,我注意到,这并没有得到一切。授予它发现所有子文件夹并保持层次正确。似乎没有任何押韵或原因。然后我试着单独列出所有文件和目录,并找出原因。例如:

File "${NSISDIR}\OWTD-DE\source\pygame.math.pyd" 

这将产生以下的错误:

File: "C:\Program Files (x86)\NSIS\game\source\pygame.math.pyd" -> no files found. 

但是该文件存在,我可以看到它在源文件夹。这是所有缺失文件的情况。起初我认为它可能是名称中的两个时期,但各种文件都有这种命名惯例,并且它们都很好。我无法弄清楚如何让它识别这些文件。有任何想法吗?

+0

你能否给我们提供一些文件名称的工作和文件名称不起作用的更多样本? – 2014-11-04 15:05:55

+0

@RolandBär你好。这里有接下来的三行:文件$ {NSISDIR} \ game \ source \ pygame.color.pyd“ 文件”$ {NSISDIR} \ game \ source \ pygame.constants.pyd“ 文件”$ {NSISDIR} \ game \ source \ pygame.display.pyd“'它们遵循相同的命名约定。此外,我使用ls> depends.txt构建了列表,以便在添加拼写和列表时完成拼写和列表。 – Gramps 2014-11-04 17:23:52

回答

0

奇怪的是,这个过程ess在Windows Home 64-bit上不能很好地工作,但在Windows Professional 64-Bit上运行得很好。我不确定这是NSIS本身的问题还是什么,但除了操作系统之外,没有什么不同。这两个操作系统之间真的没有太大的区别。但是,两者之间的配置差异可能是真正的问题。

虽然标记解决了,但我不确定实际问题和解决方案可能是什么。

1

${NSISDIR}是一个用于访问Contrib子文件夹中的UI资源的定义,你不应该把你的文件放在那里。您的源文件不应该在Program Files中,只有安装的文件应该位于那里。此外,在64位系统上有两个Program Files文件夹,Windows中有一些与%ProgramFiles%相关的兼容性黑客,因此将源文件放在那里并不是最佳选择。仅仅因为你看到该文件存在并不意味着它实际上是在Program Files文件,它可能是UAC Virtualization/VirtualStore骗你......

通常你会在同一个目录树让你.nsi地方作为休息您的文件,所以你可以使用相对路径,但你也可以使用一个定义,如果你真的想:

!define MYSOURCE "c:\foo\bar" 

... 

Section 
File /r "${MYSOURCE}\*.*" 
SectionEnd 

如果仍然错过了一些文件,我会建议尝试Process Monitor所以你可以看到的低层细节。 ..

+0

尝试将文件移出Program Files至C:base,仍然不会特别添加这些文件。也可以通过双引导查看Linux中的驱动器,并显示文件完好无损,没有隐藏的扩展名。很奇怪的问题。我将尝试Process Monitor和!define – Gramps 2014-11-05 23:38:00

相关问题