在Windows 7中注册协议处理程序 - 工作目录错误

3
我已在Windows注册表中注册了自定义协议处理程序,以便我可以从Internet浏览器启动我的应用程序并带有特定参数。到目前为止,注册工作正常。IE和Chrome都可以启动我的应用程序。
我使用了Erwinus在这个问题中的答案来注册协议处理程序:how do I create my own URL protocol? (e.g. so://...) 奇怪的是,两个浏览器都没有正确设置工作目录。Chrome似乎将工作目录默认设置为空字符串,而IE将工作目录默认设置为"C:\Users\User-X\Desktop"。
这种行为是否有意?是否有任何方法可以在注册表中指定我的应用程序的工作目录?
感谢您提前为解决此问题提供任何线索。

在您的脑海中,URL协议的正确工作目录是什么? - Anders
你能否让你的应用程序不关心工作目录? - Alex K.
@Anders 工作目录与 URL 协议本身无关,而是浏览器(或操作系统)在启动应用程序时正确设置工作目录的工作。因此,在我看来,工作目录应该设置为我的 *.exe 所在的目录。 - Pete
@Pete,你找到这个问题的答案了吗?看起来我也处于同样的状态。我已经提出了查询 https://dev59.com/2cHqa4cB1Zd3GeqP25aH - user1066231
2个回答

0

工作目录与命令行参数连接,以解决像.\file.ext这样的路径问题,由于没有相对路径参数,因此工作目录不应该有影响。

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

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


0

已经有一段时间没有人给出正确的答案了,我曾经遇到过同样的问题并找到了答案。因此,在这里发布它,以便对其他人有所帮助。

在URL协议(注册表项)中包含更改目录,以便在启动应用程序之前更改工作目录。假设您创建了名为“ProtoTest2”的URL协议,并希望从目录“C:\Source\For Ref\URL Protocol\BatchTest”运行应用程序,则以下命令将更新注册表中URL协议的命令条目。首先更改目录到所需位置,然后启动应用程序。 详细示例可在此问题如何使“URL协议”从其自己的目录启动应用程序,而不是从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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接