CPack Inno Setup 產生器

版本 3.27 新增。

Inno Setup 是 Jordan Russell 和 Martijn Laan 開發的免費 Windows 程式安裝程式 (https://jrsoftware.org/isinfo.php)。

本文件說明 Inno Setup 產生器特定的選項。

此產生器提供許多選項,例如元件。 然而,並非所有功能 (例如元件相依性) 目前都受到 Inno Setup 支援,且目前會被產生器忽略。

CPack 需要 Inno Setup 6 或更高版本。

版本 3.30 新增:此產生器現在於非 Windows 主機上可用,但需要 Wine 才能執行 Inno Setup 工具。

CPack Inno Setup 產生器特定的變數

您可以使用以下變數來變更 CPack INNOSETUP 產生器的行為

一般

以下變數皆非 Inno Setup 產生器運作的必要設定。 若下方標示為強制性的變數未設定,則會採用其預設值。

這些變數也可以包含 Inno Setup 常數,例如 {app}。 請參閱 Inno Setup 的文件以取得更多資訊。

若要求您提供任何檔案的路徑,您隨時可以提供絕對路徑,或在大多數情況下,提供相對於頂層目錄的路徑,該目錄包含 install() 指令安裝的所有檔案。

CPack 嘗試為您跳脫引號和其他特殊字元。 然而,使用特殊字元可能會導致問題。

以下變數簡化了在 CMake 中使用 Inno Setup 的方式

CPACK_INNOSETUP_USE_CMAKE_BOOL_FORMAT

Inno Setup 僅使用 yesno 作為布林格式,而 CMake 使用許多替代格式,例如 ONOFF。 開啟此選項可啟用自動轉換。

考慮以下範例

set(CMAKE_INNOSETUP_SETUP_AllowNoIcons OFF)

若開啟此選項,則會在輸出腳本中建立以下行:AllowNoIcons=no。 否則,會建立以下錯誤的行:AllowNoIcons=OFF

轉換功能在每個 Inno Setup 特定變數中皆已啟用。

強制性:

預設:

開啟 (ON)

安裝程式特定變數

CPACK_INNOSETUP_ARCHITECTURE

x86x64arm64ia64 其中之一。 此變數指定安裝程式的目標架構。 這也會影響使用的「程式檔案」資料夾或登錄機碼。

CPack 嘗試透過嘗試編譯 (請參閱 CMAKE_SIZEOF_VOID_P) 來判斷正確的值,但此選項也可以手動指定 (尤其是在使用 ia64 或跨平台編譯時)。

強制性:

預設:

根據嘗試編譯的結果,為 x86x64

CPACK_INNOSETUP_INSTALL_ROOT

若您不希望安裝程式在「程式檔案」下建立安裝目錄,則必須在此指定安裝根目錄。

完整的安裝目錄將會是:${CPACK_INNOSETUP_INSTALL_ROOT}/${CPACK_PACKAGE_INSTALL_DIRECTORY}

強制性:

預設:

{autopf}

CPACK_INNOSETUP_ALLOW_CUSTOM_DIRECTORY

若開啟,安裝程式會允許使用者變更安裝目錄,並提供額外的精靈頁面。

強制性:

預設:

開啟 (ON)

CPACK_INNOSETUP_PROGRAM_MENU_FOLDER

要建立的「開始」功能表資料夾的初始名稱。

若此變數設定為 .,則不會建立個別資料夾,應用程式捷徑會出現在頂層「開始」功能表資料夾中。

強制性:

預設:

CPACK_PACKAGE_NAME 的值

CPACK_INNOSETUP_LANGUAGES

您希望 Inno Setup 包含的語言的 分號分隔清單

目前可用的語言:armenianbrazilianPortuguesebulgariancatalancorsicanczechdanishdutchenglishfinnishfrenchgermanhebrewicelandicitalianjapanesenorwegianpolishportugueserussianslovakslovenianspanishturkishukrainian。 此清單可能會因 Inno Setup 版本而異。

強制性:

預設:

english

CPACK_INNOSETUP_IGNORE_LICENSE_PAGE

若您未使用 CPACK_RESOURCE_FILE_LICENSE 指定授權檔案,CPack 會使用一個檔案作為示範用途。 若您希望安裝程式完全忽略授權檔案,則可以啟用此選項。

強制性:

預設:

關閉 (OFF)

CPACK_INNOSETUP_IGNORE_README_PAGE

若您未使用 CPACK_RESOURCE_FILE_README 指定 readme 檔案,CPack 會使用一個檔案作為示範用途。 若您希望安裝程式完全忽略 readme 檔案,則可以啟用此選項。 使用自訂 readme 檔案時,請務必停用此選項。

強制性:

預設:

開啟 (ON)

CPACK_INNOSETUP_PASSWORD

啟用密碼保護以及使用給定密碼進行檔案加密。

強制性:

CPACK_INNOSETUP_USE_MODERN_WIZARD

啟用 Inno Setup 提供的現代外觀和風格。 若關閉此選項,則會改為使用傳統樣式。 影像和圖示檔案也會受到影響。

強制性:

預設:

因為相容性原因,OFF (關閉)

CPACK_INNOSETUP_ICON_FILE

自訂安裝程式 .ico 檔案的路徑。

使用 CPACK_PACKAGE_ICON 自訂精靈中顯示的點陣圖檔案。

強制性:

CPACK_INNOSETUP_SETUP_<directive>

此群組允許調整 Inno Setup 提供的任何 [Setup] 區段指令,其中 directive 是其名稱。

以下是一些範例

set(CPACK_INNOSETUP_SETUP_WizardSmallImageFile "my_bitmap.bmp")
set(CPACK_INNOSETUP_SETUP_AllowNoIcons OFF) # This requires CPACK_INNOSETUP_USE_CMAKE_BOOL_FORMAT to be on

所有這些變數都比其他變數具有更高的優先順序。 考慮以下範例

set(CPACK_INNOSETUP_SETUP_Password "admin")
set(CPACK_INNOSETUP_PASSWORD "secret")

密碼最終會是 admin,因為 CPACK_INNOSETUP_PASSWORD 的優先順序低於 CPACK_INNOSETUP_SETUP_Password

強制性:

檔案特定變數

雖然 install() 指令安裝的所有檔案都會自動處理並新增至安裝程式,但仍有一些變數可自訂安裝程序。

在捷徑 (例如 CPACK_CREATE_DESKTOP_LINKS) 或 [Run] 項目中使用可執行檔 (僅限 .exe.com) 之前,您必須將原始檔名 (不含路徑和副檔名) 新增至 CPACK_PACKAGE_EXECUTABLES,並為其建立「開始」功能表捷徑。

若您有兩個具有相同原始名稱的檔案 (例如 a/executable.exeb/executable.com),則會在區段中建立兩個項目。 這會導致未定義的行為,因此不建議使用。

CPACK_INNOSETUP_CUSTOM_INSTALL_INSTRUCTIONS

此變數應包含 pathinstruction 配對的 分號分隔清單,可用於自訂為每個檔案或目錄自動建立的安裝命令。

CPack 為每個檔案建立以下 Inno Setup 指令...

Source: "absolute\path\to\my_file.txt"; DestDir: "{app}"; Flags: ignoreversion

...以及每個目錄的以下行

Name: "{app}\my_folder"

您可能想要變更 my_file.txt 的目標目錄或旗標。 由於我們也可以提供相對路徑,因此您想要的行如下

Source: "my_file.txt"; DestDir: "{userdocs}"; Flags: ignoreversion uninsneveruninstall

您可以使用 my_file.txt 作為 path,並使用 Source: "my_file.txt"; DestDir: "{userdocs}"; Flags: ignoreversion uninsneveruninstall 作為 instruction 來執行此操作。

您必須注意跳脫字元問題。 因此 CMake 命令會是

set(CPACK_INNOSETUP_CUSTOM_INSTALL_INSTRUCTIONS "my_file.txt;Source: \\\"my_file.txt\\\"\\; DestDir: \\\"{userdocs}\\\"\\; Flags: ignoreversion uninsneveruninstall")

為了提高可讀性,您應該使用 CPACK_VERBATIM_VARIABLES 或將指令放入個別的 CPack 專案設定檔中,以避開跳脫字元問題。

若您自訂特定檔案的安裝指令,則會失去與其元件的連線。 若要避開此問題,請手動新增 Components: <component>。 您也需要在自訂區段中自行新增其捷徑和 [Run] 項目,因為 CPACK_PACKAGE_EXECUTABLES 將不再找到該可執行檔。

以下是另一個範例 (注意:您必須避開跳脫字元問題,此範例才能運作)

set(CPACK_INNOSETUP_CUSTOM_INSTALL_INSTRUCTIONS
    "component1/my_folder" "Name: \"{userdocs}\\my_folder\"\; Components: component1"
    "component2/my_folder2/my_file.txt" "Source: \"component2\\my_folder2\\my_file.txt\"\; DestDir: \"{app}\\my_folder2\\my_file.txt\"\; Flags: ignoreversion uninsneveruninstall\; Components: component2")
強制性:

此變數應包含 linklink name 配對的 分號分隔清單,可用於在「開始」功能表資料夾中新增捷徑,除了可執行檔的捷徑之外 (請參閱 CPACK_PACKAGE_EXECUTABLES)。 雖然 link name 是標籤,但 link 可以是 URL 或相對於安裝目錄的路徑。

以下是一個範例

set(CPACK_INNOSETUP_MENU_LINKS
    "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/cmake.html"
    "CMake Help" "https://cmake.dev.org.tw" "CMake Web Site")
強制性:

若開啟此選項,則會自動將應用程式解除安裝程式的捷徑新增至「開始」功能表資料夾。

強制性:

預設:

關閉 (OFF)

CPACK_INNOSETUP_RUN_EXECUTABLES

使用者在安裝程式完成時可以執行的 CPACK_PACKAGE_EXECUTABLES 中指定的可執行檔的 分號分隔清單

它們會在內部新增至 [Run] 區段。

強制性:

元件特定變數

此產生器支援元件以及下載的元件。 然而,元件的某些功能 (尤其是元件相依性) 尚不支援。 這些變數目前會被忽略。

若元件具有父群組,CPack 基於技術原因會在 Inno Setup 中變更元件的名稱。 若您有元件 component 及其父群組 group,請考慮在 Inno Setup 腳本中使用 group\component 作為元件名稱。

以下是一些元件的其他變數

CPACK_INNOSETUP_<compName>_INSTALL_DIRECTORY

若您不希望元件 compName 安裝在 {app} 下,則必須在此指定其安裝目錄。

強制性:

CPACK_INNOSETUP_VERIFY_DOWNLOADS

此選項僅影響下載的元件。

若開啟此選項,則會在編譯和下載期間計算下載封存檔的雜湊值。 安裝程式只會在雜湊值相符時繼續進行。

強制性:

預設:

開啟 (ON)

編譯和腳本特定變數

CPACK_INNOSETUP_EXECUTABLE

Inno Setup 腳本編譯器命令的檔案名稱。

強制性:

預設:

ISCC

CPACK_INNOSETUP_EXECUTABLE_ARGUMENTS

Inno Setup 腳本編譯器命令的額外命令列選項的 分號分隔清單

例如:/Qp;/Smysigntool=$p

請注意跳脫字元問題

強制性:

CPACK_INNOSETUP_DEFINE_<macro>

此群組允許將自訂 define 指令新增為 Inno Setup Preprocessor 命令的命令列選項。 每個項目都模擬 #define public <macro> 指令。 其巨集可從任何地方存取 (public),因此也可以在額外的腳本檔案中使用。

巨集名稱不得包含任何特殊字元。 如需詳細規則,請參閱 Inno Setup Preprocessor 文件。

考慮以下範例

# The following line emulates: #define public MyMacro "Hello, World!"
set(CPACK_INNOSETUP_DEFINE_MyMacro "Hello, World!")

此時,您可以在任何地方使用 MyMacro。 例如,在以下額外的腳本中

AppComments={#emit "'My Macro' has the value: " + MyMacro}

請注意跳脫字元問題

強制性:

CPACK_INNOSETUP_EXTRA_SCRIPTS

要處理的其他 .iss 腳本檔案的路徑的 分號分隔清單

它們會在內部使用 #include 指令包含在輸出腳本檔案的頂端。

您可以在檔案中新增任何區段來擴充安裝程式 (例如,新增其他工作或登錄機碼)。 擴充 [Setup] 區段時,建議使用 CPACK_INNOSETUP_SETUP_<directive>

強制性:

CPACK_INNOSETUP_CODE_FILES

要處理的其他 Pascal 檔案的路徑的 分號分隔清單

此變數實際上與 CPACK_INNOSETUP_EXTRA_SCRIPTS 相同,只是您不必在檔案頂端新增 [Code]。 永遠不要變更程式碼檔案中的目前區段。 這會導致未定義的行為! 請將它們視為一般的 Pascal 腳本。

程式碼檔案包含在輸出腳本的最底端。

強制性: