2014-01-20 18 views
1

我想在程序文件\ my org \ my app中包含一個文件在Inno Setup安裝中。該文件實際上位於c:\ program files(x86)\ my org \ my app中,但我希望能夠在32位和64位版本的Windows上編譯安裝程序,所以我想使用一個常量作爲源文件名:在Inno Setup源文件名中使用常量

[Files] 
Source: "{pf}\my org\my app\myapp.exe"; DestDir: "{app}" 

Inno Setup的只是對待{} PF字面上,我得到一個消息,說無法找到文件「{PF} \我的組織\我的程序\ MyApp.exe的」

在幫助中說,如果使用外部標誌,則只能對源文件使用常量,但僅適用於目標系統上已存在的文件。

還有另外一個類似的疑問,建議您可以使用常量在源文件名,但我不能得到這個工作:

How to use parent of a directory in a Source parameter of the Files section?

我也試着設置:

[Setup] 
SourceDir={pf}\my org\my app 

但是再次,編譯器將{pf}視爲文字文本而不是替換它,而不像其中常量被替換的DefaultDirName。

我使用Inno Setup版本5.5.3(a)。

任何想法?

+0

'{pf}'常量在運行時被擴展,而不是在編譯時,所以你用這種方法運氣不好。預處理器只聲明瞭Windows文件夾的變量,但是,您可以從註冊表中讀取程序文件的路徑,這是瘋狂的。如果我是你,我會製作一個子文件夾,例如'部署',然後放置安裝腳本。然後你可以用相對路徑到達你的文件,這比希望它們在某個Program Files文件夾中要好得多。此外,Program Files文件夾不適合部署... – TLama

+0

好的 - 這很有道理。鏈接的例子使用{src}常量作爲源文件名的一部分,但我猜{src}常量在編譯時可用。謝謝 – user3214734

+0

好吧,它在編譯時被擴展了,但它不能用於'Source'參數和'SourceDir'指令。例如,如果你沒有指定'external'標誌,'Source'參數值必須在預處理之後(編譯開始之前)被知道。總之,除了使用預處理器之外,你不能做其他任何你想做的事情。 – TLama

回答

0

您可以使用該預處理器。它沒有所有那些有用的目錄常量,但它可以從環境變量中讀取,這也給你提供了大多數系統路徑名。在你的例子中:

[Setup] 
#define ProgramFiles GetEnv("ProgramFiles") 
SourceDir={#ProgramFiles}\my org\my app 

請特別注意程序文件目錄的位數。其他目錄如AppData的問題較少。