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 下載,以上~