use*_*254 17 inno-setup file-association
我正在使用Inno安装程序,并尝试关联位于Program Files (x86)Windows 7中的程序.我有以下内容:
#define MyAppName "MyView"
#define MyAppExeName "MyView.exe"
[Setup]
AppName={#MyAppName}
[Registry]
Root: HKCR; Subkey: ".mpl"; ValueType: string; ValueName: ""; ValueData: "MyView"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "MyView"; ValueType: string; ValueName: ""; ValueData: "MyView"; Flags: uninsdeletekey
Root: HKCR; Subkey: "MyView\delta.ico"; ValueType: string; ValueName: ""; ValueData: "{app}\GeoView.EXE,0"
Root: HKCR; Subkey: "MyView\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\MYVIEW.EXE"" ""%1"""
Run Code Online (Sandbox Code Playgroud)
为什么协会不起作用的任何建议?
小智 30
如果要将程序与扩展名关联,只需在iss文件中添加以下指令:
在该部分
[Setup]
ChangesAssociations = yes
Run Code Online (Sandbox Code Playgroud)
^ -Setup将告诉Explorer在安装结束时刷新其文件关联信息,卸载将在卸载结束时执行相同操作.
并在该部分
[Registry]
Root: HKCR; Subkey: ".mpl"; ValueData: "{#MyAppName}"; Flags: uninsdeletevalue; ValueType: string; ValueName: ""
Root: HKCR; Subkey: "{#MyAppName}"; ValueData: "Program {#MyAppName}"; Flags: uninsdeletekey; ValueType: string; ValueName: ""
Root: HKCR; Subkey: "{#MyAppName}\DefaultIcon"; ValueData: "{app}\{#MyAppExeName},0"; ValueType: string; ValueName: ""
Root: HKCR; Subkey: "{#MyAppName}\shell\open\command"; ValueData: """{app}\{#MyAppExeName}"" ""%1"""; ValueType: string; ValueName: ""
Run Code Online (Sandbox Code Playgroud)
Root: HKCR; Subkey: ".magi"; ValueData: "MyMAGIApplication"; ValueType: string; ValueName: ""; Flags: uninsdeletevalue.此指令在注册表中添加".magi"键,在HKEY_CLASSES_ROOT(HKCR)中更准确.在这条指令中,我们也ValueName=""得到了它在注册表中的默认值.

Root: HKCR; Subkey: "MyMAGIApplication"; ValueData: "Program MAGI"; ValueType: string; ValueName: ""; Flags: uninsdeletekey为了MyMAGIApplication在HKCR中添加值为"Program MAGI" 的密钥.
Root: HKCR; Subkey: "MyMAGIApplication\DefaultIcon"; ValueData: "{app}\MAGI.EXE,0"; ValueType: string; ValueName: ""为了关联可执行文件中包含的图标."0"表示它是可执行文件MAGI.EXE中的第一个图标.
Root: HKCR; Subkey: "MyMAGIApplication\shell\open\command"; ValueData: """{app}\MAGI.EXE"" ""%1"""; ValueType: string; ValueName: ""为了添加子shell\open\command.使用此指令,当用户单击扩展名为".magi"的文件时,Windows可以启动应用程序MAGI.EXE.
注册表中的结果:

创建文件关联已在SO上得到解答。但是核心文档引用了它:
http://www.jrsoftware.org/isfaq.php#assoc
创建文件关联
首先将
[Setup]section指令设置ChangesAssociations为yes。然后创建[Registry]如下所示的条目。Run Code Online (Sandbox Code Playgroud)[Registry] Root: HKCR; Subkey: ".myp"; ValueType: string; ValueName: ""; ValueData: "MyProgramFile"; Flags: uninsdeletevalue
.myp是我们正在关联的扩展名。MyProgramFile是存储在注册表中的文件类型的内部名称。确保为此使用唯一的名称,以免意外覆盖另一个应用程序的注册表项。Run Code Online (Sandbox Code Playgroud)Root: HKCR; Subkey: "MyProgramFile"; ValueType: string; ValueName: ""; ValueData: "My Program File"; Flags: uninsdeletekey
My Program File上面是文件类型的名称,如资源管理器中所示。Run Code Online (Sandbox Code Playgroud)Root: HKCR; Subkey: "MyProgramFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MYPROG.EXE,0"
DefaultIcon是注册表项,用于指定包含与文件类型关联的图标的文件名。,0告诉Explorer使用中的第一个图标MYPROG.EXE。(,1表示第二个图标。)Run Code Online (Sandbox Code Playgroud)Root: HKCR; Subkey: "MyProgramFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\MYPROG.EXE"" ""%1"""
shell\open\command是注册表项,用于指定在资源管理器中双击某个类型的文件时要执行的程序。周围的引号在命令行中,因此它可以正确处理长文件名。
这有效:
Root: HKCR; Subkey: ".mpl"; ValueType: string; ValueName: ""; ValueData: "{#MyAppName}"; Flags: uninsdeletevalue
Root: HKCR; Subkey: ".tvd"; ValueType: string; ValueName: ""; ValueData: "{#MyAppName}"; Flags: uninsdeletevalue
Root: HKCR; Subkey: ".log"; ValueType: string; ValueName: ""; ValueData: "{#MyAppName}"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "{#MyAppName}"; ValueType: string; ValueName: ""; ValueData: "MyView"; Flags: uninsdeletekey
Root: HKCR; Subkey: "{#MyAppName}\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\delta.ico,0"
Root: HKCR; Subkey: "{#MyAppName}\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10565 次 |
| 最近记录: |