3

我在 Windows 注册表中注册了一个自定义协议处理程序,因此我可以使用 Internet 浏览器中的特定参数启动我的应用程序。到目前为止,注册工作正常。IE 和 Chrome 都在启动我的应用程序。

我在这个问题中使用 Erwinus 的答案来注册协议处理程序:如何创建自己的 URL 协议?(例如所以://...)

奇怪的是,两个浏览器都没有正确设置工作目录。Chrome 似乎将工作目录默认为空字符串,而 IE 将工作目录默认为“C:\Users\User-X\Desktop”。

这种行为是有意的吗?
有没有办法在注册表中为我的应用程序指定工作目录?

在此先感谢您提供有关此问题的任何线索。

4

2 回答 2

0

由于没有一个正确的答案在这里已经有一段时间了,我面临着同样的问题并找到了答案。所以,把它贴在这里,对其他人有帮助。

在 URL 协议(注册表项)中包含更改目录,以便在启动应用程序之前更改工作目录。假设您创建了名为“ProtoTest2”的 URL 协议,并希望从目录“C:\Source\For Ref\URL Protocol\BatchTest”运行您的应用程序,那么下面的命令会更新注册表中 URL 协议的命令条目. 首先将目录更改为所需位置并启动应用程序。此问题中提供了详细示例How to make "URL Protocol" to launch application from its own directory 而不是从 c:\windows\system32 启动?

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
于 2021-08-02T07:12:49.853 回答
0

工作目录连接到命令行参数以解析路径.\file.ext,因为没有相对路径参数,所以工作目录应该无关紧要。

您的应用程序不应依赖工作目录来加载库和其他应用程序特定文件。

可以在文件类型注册上设置一个未记录的值NoWorkingDirectory,但我不确定它是否适用于 URL 协议。

于 2017-04-27T12:31:14.667 回答