如何使“URL 协议”从其自己的目录启动应用程序而不是从 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://”,批处理文件运行,但是显示路径“C:\Windows\system32”而不是批处理文件的目录。因此,我相信使用 URL 协议启动的应用程序以 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

enter image description here