如何让 "URL Protocol" 从它自己的目录启动应用程序而不是从 c:\windows\system32 启动?

How to make "URL Protocol" to launch application from its own directory instead of launching from c:\windows\system32?

我已经在我的系统中注册了一个 URL 协议,使用下面的脚本来启动一个批处理文件“showPath.bat”。

@echo off
reg add HKEY_CLASSES_ROOT\ProtoTest /t REG_SZ /d "My Description" /f
reg add HKEY_CLASSES_ROOT\ProtoTest /v "URL Protocol" /t REG_SZ /d "" /f
reg add HKEY_CLASSES_ROOT\ProtoTest\shell /f
reg add HKEY_CLASSES_ROOT\ProtoTest\shell\open /f
reg add HKEY_CLASSES_ROOT\ProtoTest\shell\open\command /t REG_SZ /d "C:\TestFolder\showPath.bat" /f

pause

“showPath.bat”的内容只是显示当前工作目录。即,

@echo off
SET var=%cd%
ECHO %var%
pause

如果我运行直接双击批处理文件,我可以正确地看到它的路径。但是,如果我使用上面注册的 URL 协议启动批处理文件。即,从 Chrome 浏览“ProtoTest://”,批处理文件 运行s,但是显示路径“C:\Windows\system32”而不是批处理文件的目录。因此,我相信应用程序使用 URL 协议 运行s 以 system32 作为工作目录启动。现在如何使用 URL 协议从浏览器启动时从其自己的目录中获取批处理文件 运行 - 而无需修改批处理文件本身。我只能更改 URL 协议。

下面的代码对我有用。我的批处理文件位于一个包含空格的文件夹中,因此添加了“”和转义符。然而,它被添加到注册表中,如下图所示,没有转义字符。回复归功于@aschipfl

@echo off
reg add HKEY_CLASSES_ROOT\ProtoTest2 /t REG_SZ /d "My Description" /f
reg add HKEY_CLASSES_ROOT\ProtoTest2 /v "URL Protocol" /t REG_SZ /d "" /f
reg add HKEY_CLASSES_ROOT\ProtoTest2\shell /f
reg add HKEY_CLASSES_ROOT\ProtoTest2\shell\open /f
reg add HKEY_CLASSES_ROOT\ProtoTest2\shell\open\command /t REG_EXPAND_SZ /d "%ComSpec% /C \"cd /D \"C:\Source\For Ref\URL Protocol\BatchTest\" ^& showPath.bat\"" /f

pause