Inno Setup自定义URL协议的注册表项

10

我希望有人能够帮助我将以下内容翻译成正确格式的InnoSetup [Registry]条目,以便在我的InnoSetup安装程序中使用?这里的目标是在用户的计算机上创建一个新的自定义URL协议。

HKEY_CLASSES_ROOT      
       ctp
          (Default) = "URL:Alert Protocol"
          URL Protocol = ""
          DefaultIcon
               (Default) = "myapp.exe"
          shell
               open
                    command
                         (Default) = "C:\Program Files\MyApp\myapp.exe"

我阅读了InnoSetup帮助文档,但无法弄清楚如何将上述内容翻译成正确的InnoSetup注册表部分:


我仔细阅读了InnoSetup帮助文档,但是没有找到如何将上述内容转化为适当的InnoSetup注册表部分的方法。
[Registry]
Root: HKCR; Subkey: ".....etc.

安装程序运行后的最终结果是用户在格式为“ctp://myapp.exe”的网站链接上单击,本地应用程序将在用户的计算机上启动。我这样做是否正确?非常感谢任何回复。


1
基本上,您需要为每个值添加一个单独的 [Registry] 条目。嵌套无关紧要,您只需要在 Key: 部分中指定每个值的完整键路径即可。请参阅此 FAQ 条目 以获取示例。 - Deanna
另外,不要忘记在你的shell command值中使用%1 - TLama
2个回答

20

试着用这种方式:

[Registry]
Root: HKCR; Subkey: "ctp"; ValueType: "string"; ValueData: "URL:Custom Protocol"; Flags: uninsdeletekey
Root: HKCR; Subkey: "ctp"; ValueType: "string"; ValueName: "URL Protocol"; ValueData: ""
Root: HKCR; Subkey: "ctp\DefaultIcon"; ValueType: "string"; ValueData: "{app}\YourApp.exe,0"
Root: HKCR; Subkey: "ctp\shell\open\command"; ValueType: "string"; ValueData: """{app}\YourApp.exe"" ""%1"""

TLama提供的答案完美无误!非常感谢。我还有一个问题。有没有办法使用javascript在网页中检查本地文件是否存在?我不需要启动应用程序,我只需要在调用新的URL协议之前检查文件是否存在,如果不存在则提示用户下载它。 - Tim
不用谢!如果解决了你的问题,那么你可以考虑这样接受它。对于你的额外问题,请作为一个单独的问题提出(说实话,我甚至无法回答你,因为我不知道JavaScript)。感谢您并欢迎来到StackOverflow! - TLama

1

@TLama的回答是正确的,但可能并不适用于所有人。

HKCU实际上是HKLM\Software\ClassesHKCU\Software\Classes之间的合并,并且直接写入HKCU 可能需要在某些系统上具有管理员访问权限,因此它与InnoSetup的PrivilegesRequired=lowest不兼容。官方HKCU文档解释如下:

如果您将键写入HKEY_CLASSES_ROOT下的键,则系统会将信息存储在HKEY_LOCAL_MACHINE\Software\Classes下。如果您将值写入HKEY_CLASSES_ROOT下的键,并且该键已经存在于HKEY_CURRENT_USER\Software\Classes下,则系统将在那里存储信息,而不是在HKEY_LOCAL_MACHINE\Software\Classes下。

另一种选择是 HKA(请参见[Registry]部分),它在管理安装中解析为HKLM,在非管理安装中解析为HKCU。文档还指出:

仅应使用HKCU和HKA来设置与漫游配置文件兼容的设置。

不建议使用HKCR,而应使用将Subkey参数设置为“Software\Classes”的HKA。

因此,如果您关心非管理安装,则您的[Registry]部分应如下所示:

[Registry]
Root: HKA; Subkey: "Software\Classes\ctp"; ValueType: "string"; ValueData: "URL:Custom Protocol"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\ctp"; ValueType: "string"; ValueName: "URL Protocol"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\ctp\DefaultIcon"; ValueType: "string"; ValueData: "{app}\myapp.exe,0"
Root: HKA; Subkey: "Software\Classes\ctp\shell\open\command"; ValueType: "string"; ValueData: """{app}\myapp.exe"" ""%1"""

更多信息请参见上面的链接,以及以下链接:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接