如何在 Inno Setup 中關聯多種檔案格式

2022-11-07 15:00:49

問題描述

Inno Setup 是一款十分強大的 Windows 安裝程式製作軟體,可以通過編寫並編譯 iss 指令碼來建立安裝包。之前都是直接將 Pyinstaller 生成的資料夾壓縮為 zip 格式來發布,但是這樣做存在一些問題,比如沒有桌面和開始選單快捷方式,沒法關聯支援的檔案格式。而通過 Inno Setup 生成的安裝包可以幫我們解決這些問題。

問題解決

關聯檔案格式

要想實現關聯檔案格式的功能,我們需要修改登入檔,先來觀察一下與 mp3 格式相關的登入檔格式:

可以看到裡面有一個名為 WMP11.AssocFile.MP3,這個鍵說明 Win11 的媒體播放器支援 mp3 格式,我們只需在這裡面建立一個新的鍵,比如 Groove.AssocFile.mp3,就能向系統宣告我們的軟體也支援 mp3 格式。

當我們把遊標移到 mp3 檔案上時,工具提示上會顯示一些檔案資訊,比如專案型別、大小和建立時間,我們同樣可以通過操作登入檔來修改專案型別資訊。

由於我們先前宣告的鍵名是 Groove.AssocFile.mp3,所以可以在 計算機\HKEY_LOCAL_MACHINE\SOFTWARE\Classes 下新建一個名為 Groove.AssocFile.mp3 的項,並建立一個鍵名為空,鍵值為 MP3 Audio File 的鍵值對,這樣當我們把 mp3 檔案關聯到自己的軟體上時,工具提示上的專案型別顯示的就會是 MP3 Audio File 而非 MP3 檔案

接下來在 Groove.AssocFile.mp3 中新建 DefaultIcon 項,新建一個值為 圖示檔案路徑,0 的鍵值對,這樣就能自定義檔案圖示了。

最後當我們雙擊檔案時,系統會通過使用預設的關聯程式來開啟此檔案。假設我們已經關聯了 mp3 檔案型別,要想讓系統使用我們的程式開啟這個檔案,就需要向系統說明可執行檔案的路徑,同時這個可執行檔案要接受一個被開啟的檔案路徑引數。只需在 Groove.AssocFile.mp3 下新建 shell\open\command 項,新增值為 "可執行檔案路徑" "%1" 的鍵值對即可。

可以在 iss 指令碼中新增下述程式碼來實現上述過程:

#define MyAppAssocName "Groove.AssocFile"

[Registry]
; .mp3 format
Root: HKA; Subkey: "Software\Classes\.mp3\OpenWithProgids"; ValueType: string; ValueName: "{#MyAppAssocName}.mp3"; ValueData: ""; Flags: uninsdeletevalue
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.mp3"; ValueType: string; ValueName: ""; ValueData: "MP3 Audio File"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.mp3\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyFileExtensionIcon},0"
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.mp3\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""

Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".myp"; ValueData: ""

如果想要新增更多的關聯檔案格式,只需重複 [Registry]mp3 的寫法即可,比如關聯 flac 格式:

; .flac format
Root: HKA; Subkey: "Software\Classes\.flac\OpenWithProgids"; ValueType: string; ValueName: "{#MyAppAssocName}.flac"; ValueData: ""; Flags: uninsdeletevalue
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.flac"; ValueType: string; ValueName: ""; ValueData: "Free Lossless Audio Codec File"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.flac\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyFileExtensionIcon},0"
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.flac\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""

修改開啟方式選單中的名字

如果只完成了上述步驟,會發現開啟方式選單中顯示的是可執行檔案的檔名,比如 Groove.exe,如果想改為下圖所示的 Groove Music Player,仍需要修改登入檔。

可執行檔名.exe 項中新增鍵名為 FriendlyAppName,值為 Groove Music Player 的鍵值對即可。

上述過程對應的 iss 程式碼是:

Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}"; ValueType: string; ValueName: ""; ValueData: "Groove Music Player"
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}"; ValueType: string; ValueName: "FriendlyAppName"; ValueData: "Groove Music Player"

後記

至此,在 Inno Setup 中新增檔案關聯的方式就介紹完畢了,上述過程提及的安裝包可以從 https://github.com/zhiyiYo/Groove/releases/latest 下載,以上~