Inno Setup中的文件关联

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.

注册表中的结果:

在KHCR\MyMAGIApplication中添加条目


And*_*kle 5

创建文件关联已在SO上得到解答。但是核心文档引用了它:

http://www.jrsoftware.org/isfaq.php#assoc

创建文件关联

首先将[Setup]section指令设置ChangesAssociations为yes。然后创建[Registry]如下所示的条目。

[Registry]
Root: HKCR; Subkey: ".myp"; ValueType: string; ValueName: ""; ValueData: "MyProgramFile"; Flags: uninsdeletevalue
Run Code Online (Sandbox Code Playgroud)

.myp是我们正在关联的扩展名。MyProgramFile是存储在注册表中的文件类型的内部名称。确保为此使用唯一的名称,以免意外覆盖另一个应用程序的注册表项。

Root: HKCR; Subkey: "MyProgramFile"; ValueType: string; ValueName: ""; ValueData: "My Program File"; Flags: uninsdeletekey
Run Code Online (Sandbox Code Playgroud)

My Program File 上面是文件类型的名称,如资源管理器中所示。

Root: HKCR; Subkey: "MyProgramFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MYPROG.EXE,0"
Run Code Online (Sandbox Code Playgroud)

DefaultIcon是注册表项,用于指定包含与文件类型关联的图标的文件名。,0告诉Explorer使用中的第一个图标MYPROG.EXE。(,1表示第二个图标。)

Root: HKCR; Subkey: "MyProgramFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\MYPROG.EXE"" ""%1"""
Run Code Online (Sandbox Code Playgroud)

shell\open\command是注册表项,用于指定在资源管理器中双击某个类型的文件时要执行的程序。周围的引号在命令行中,因此它可以正确处理长文件名。


use*_*254 2

这有效:

    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)