2014-11-04 76 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

相關問題