小编Str*_*Cat的帖子

自定义协议(通过 Windows 注册表)在本地文件夹和默认软件中打开文件

请阅读下面我的回答

通过在 Windows 注册表中定义自定义 URI 方案,单击 HTML 链接(在 chrome 中)时,我想在其默认软件中打开本地文件。我为注册表规则定义和我使用的链接尝试了许多不同的语法。我的默认 .reg 文件如下所示:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\test]
"URL Protocol"=""
@="URL:test Protocol"
"DefaultIcon"="\"C:\\Windows\\system32\\notepad.exe\",1"

[HKEY_CLASSES_ROOT\test\shell]

[HKEY_CLASSES_ROOT\test\shell\open]

[HKEY_CLASSES_ROOT\test\shell\open\command]
@="\"C:\\Windows\\system32\\notepad.exe\" \"%1\""
Run Code Online (Sandbox Code Playgroud)

我已经尝试了我能找到的 %1, %*, "%1" "%2" 的每个例子......现在我只是尝试使用记事本,尽管最终我想使用 explorer.exe打开指定类型文件的默认软件。

我的 HTML 文件是:

<a href="test:C:test.txt">Open</a>
Run Code Online (Sandbox Code Playgroud)

我试过 test://C:[...]、test:///C:[...],并在文件路径中使用斜杠和反斜杠。

使用上述 2 个版本,记事本打开,但我收到“文件名、目录名或卷标语法不正确”。(我将我的文件放在 C 驱动器根目录中以确保避免使用任何特殊字符)

另外,如果我定义文件的直接路径而不是参数字符串:@="\"C:\Windows\explorer.exe\" \"C:\test.txt\"" ,文件打开没有任何问题.

我究竟做错了什么 ?有没有办法查看作为参数接收的字符串?

更新 我修改了注册表项以使用回显命令调用一个简单的批处理文件(“C:\test.bat”%1)来查看接收到的参数(回显 %1 暂停)。默认情况下传递整个 URI(例如: "test:C:\test.txt" )。我发现如果我在方案后面放一个逗号,批处理文件会收到 2 个参数:%1="test:" & %2="C:\test.txt"。但是注册表项值仍然需要有“%1”...

“%2”在进入批处理文件之前不包含任何内容。很遗憾,我不能直接调用 '"app.exe" %2' 并且需要从 .bat 调用它,如果找到解决方案,我会更新。

windows registry protocols local url-scheme

1
推荐指数
1
解决办法
1811
查看次数

标签 统计

local ×1

protocols ×1

registry ×1

url-scheme ×1

windows ×1