Windows registry - 注册一个应用程序打开一个文件类型

Windows registry - register an application to open a file type

我正在为一个应用程序制作安装程序,该应用程序具有自定义 URI 方案和自己的文件类型,可以用它打开。使用 launcher.bat 执行的应用程序,在注册表中我设置了 launcher.bat 来执行此操作。 它按应有的方式工作,除非我想注册应用程序,使其名称在浏览器和浏览器中显示为打开应用程序,而不是 launcher.bat

安装程序脚本应用的注册表文件如下(它是动态生成的,所以也不要介意应用程序路径):

Windows Registry Editor Version 5.00

; ---- Add myext extension
[-HKEY_CLASSES_ROOT\.myext]

[HKEY_CLASSES_ROOT\.myext]
"content-type"="application/myext+xml"
@="myapp"


; ---- Add myapp for protocol
[-HKEY_CLASSES_ROOT\myapp]

[HKEY_CLASSES_ROOT\myapp]
@="URL:<Application Protocol>"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\myapp\DefaultIcon]
@="MyApplication.exe,1"

[HKEY_CLASSES_ROOT\myapp\shell]
@="open"

[HKEY_CLASSES_ROOT\myapp\shell\open]
@="Open with My Application"

[HKEY_CLASSES_ROOT\myapp\open\command]
@="\"C:\Program Files (x86)\My Application\launcher.bat\" \"%1\""

为此,我还应该向注册表添加什么?

说出你的类型:

assoc .<ext> <anyName>

然后设置程序打开:

ftype <anyName>=<application-path>

用您的名字替换尖括号中的所有名字:

<ext>: 扩展名

<anyName>:一个名称,其中 windows 知道要使用的程序,您可以 assoc 多次使用不同的扩展名

<application-path>: 打开程序的文件名。

经过几天的挖掘,我找到了解决方案:

上面的注册表为启动程序(或任何可执行文件)分配扩展名以打开它,但是 OS 只显示可执行文件名称作为关联程序 - 这很好,因为它没有注册.这可以显示在关联文件的属性 window 上,在 exprorer 中,当您右键单击文件并选择打开方式时,甚至在注册 URI 方案时在浏览器中也是如此。

为此,还必须在注册表中注册该应用程序。在网上搜索之后,终于在 MSDN 上找到了这样做的额外注册表更改。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Applications\MyApplicationLauncher.bat]
FriendlyAppName = "My Application"
DefaultIcon = "<MyApplicationPath>\MyApplication.exe,1"

请注意,使用 launcher.batstart.bat 等应用程序名称可能会导致冲突;为了证明它的唯一性,我只好在安装包中给它重命名以识别它。