如何在 Inno Setup 中關聯多種文件格式

問題描述Inno Setup 是一款十分強大的 Windows 安裝程序制作軟件,可以通過編寫并編譯 iss 腳本來創建安裝包 。之前都是直接將 Pyinstaller 生成的文件夾壓縮為 zip 格式來發布,但是這樣做存在一些問題 , 比如沒有桌面和開始菜單快捷方式,沒法關聯支持的文件格式 。而通過 Inno Setup 生成的安裝包可以幫我們解決這些問題 。
問題解決關聯文件格式要想實現關聯文件格式的功能 , 我們需要修改注冊表,先來觀察一下與 mp3 格式相關的注冊表格式:

如何在 Inno Setup 中關聯多種文件格式

文章插圖
可以看到里面有一個名為 WMP11.AssocFile.MP3 , 這個鍵說明 Win11 的媒體播放器支持 mp3 格式,我們只需在這里面創建一個新的鍵,比如 Groove.AssocFile.mp3,就能向系統聲明我們的軟件也支持mp3 格式 。
當我們把光標移到 mp3 文件上時 , 工具提示上會顯示一些文件信息,比如項目類型、大小和創建時間,我們同樣可以通過操作注冊表來修改項目類型信息 。
如何在 Inno Setup 中關聯多種文件格式

文章插圖
由于我們先前聲明的鍵名是 Groove.AssocFile.mp3,所以可以在 計算機\HKEY_LOCAL_MACHINE\SOFTWARE\Classes 下新建一個名為 Groove.AssocFile.mp3 的項,并創建一個鍵名為空 , 鍵值為 MP3 Audio File 的鍵值對,這樣當我們把 mp3 文件關聯到自己的軟件上時,工具提示上的項目類型顯示的就會是 MP3 Audio File 而非 MP3 文件 。
如何在 Inno Setup 中關聯多種文件格式

文章插圖
接下來在 Groove.AssocFile.mp3 中新建 DefaultIcon 項,新建一個值為 圖標文件路徑,0 的鍵值對,這樣就能自定義文件圖標了 。
如何在 Inno Setup 中關聯多種文件格式

文章插圖
最后當我們雙擊文件時,系統會通過使用默認的關聯程序來打開此文件 。假設我們已經關聯了 mp3 文件類型 , 要想讓系統使用我們的程序打開這個文件,就需要向系統說明可執行文件的路徑,同時這個可執行文件要接受一個被打開的文件路徑參數 。只需在 Groove.AssocFile.mp3 下新建 shell\open\command 項 , 添加值為 "可執行文件路徑" "%1" 的鍵值對即可 。
【如何在 Inno Setup 中關聯多種文件格式】
如何在 Inno Setup 中關聯多種文件格式

文章插圖
可以在 iss 腳本中添加下述代碼來實現上述過程:
#define MyAppAssocName "Groove.AssocFile"[Registry]; .mp3 formatRoot: HKA; Subkey: "Software\Classes\.mp3\OpenWithProgids"; ValueType: string; ValueName: "{#MyAppAssocName}.mp3"; ValueData: ""; Flags: uninsdeletevalueRoot: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.mp3"; ValueType: string; ValueName: ""; ValueData: "MP3 Audio File"; Flags: uninsdeletekeyRoot: 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 formatRoot: HKA; Subkey: "Software\Classes\.flac\OpenWithProgids"; ValueType: string; ValueName: "{#MyAppAssocName}.flac"; ValueData: ""; Flags: uninsdeletevalueRoot: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.flac"; ValueType: string; ValueName: ""; ValueData: "Free Lossless Audio Codec File"; Flags: uninsdeletekeyRoot: 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,仍需要修改注冊表 。
如何在 Inno Setup 中關聯多種文件格式

文章插圖
可執行文件名.exe 項中添加鍵名為 FriendlyAppName

推薦閱讀