Inno Setup,注册表部分,link 同一条目中的 2 个文件扩展名

Inno Setup, Registry section, link 2 files extensions in the same entry

这可能是一个基本问题,但我对注册表了解不够。我的应用程序使用 2 种文件:.bmc 和 .mef。我希望它们显示有 2 个不同的图标。我做了:

Root: HKCR; Subkey: ".bmc"; ValueType: string; ValueName: ""; ValueData: "MyProg"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "MyProg"; ValueType: string; ValueName: ""; ValueData: "MyProg File"; Flags: uninsdeletekey
Root: HKCR; Subkey: "MyProg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MyProg.exe,0"
Root: HKCR; Subkey: "MyProg\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\MyProg.exe"" ""%1"""

这成功地link将我的程序转换为一种文件类型并使用正确的图标显示文件。

现在,我如何 link 使用相同程序的第二个文件类型,但显示另一个图标?

非常感谢您的帮助!

根据 this article,您可以为您的扩展程序创建一个 DefaultIcon 子项。有一个例子显示了如何明确地为扩展分配一个图标:

The following example shows a detailed view of the registry entries that are required for a file-type icon assignment. The file name extension is associated with an application, but the icon assignment is to the file name extension itself so that the associated application does not dictate the default icon.

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
      DefaultIcon
         (Default) = C:\MyDir\MyProgram.exe,2

所以我认为你的脚本可以这样修改:

; register application
Root: HKCR; Subkey: "MyProg"; ValueType: string; ValueName: ""; ValueData: "MyProg File"; Flags: uninsdeletekey
Root: HKCR; Subkey: "MyProg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MyProg.exe,0"
Root: HKCR; Subkey: "MyProg\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\MyProg.exe"" ""%1"""

; register .bmc extension and let it inherit the assigned app's DefaultIcon icon
Root: HKCR; Subkey: ".bmc"; ValueType: string; ValueName: ""; ValueData: "MyProg"; Flags: uninsdeletevalue

; register .mef extension and explicitly specify its icon (icon index 1 of your app.)
Root: HKCR; Subkey: ".mef"; ValueType: string; ValueName: ""; ValueData: "MyProg"; Flags: uninsdeletevalue
Root: HKCR; Subkey: ".mef\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MyProg.exe,1"; Flags: uninsdeletevalue