Windows 使用自定义协议打开URL-语法错误?

Windows 使用自定义协议打开URL-语法错误?,windows,iis-7,protocols,Windows,Iis 7,Protocols,我在使用自定义协议通过浏览器打开本地文件时遇到了一些实际问题。现在,在您向我介绍自定义协议之前,这个web应用程序将在封闭的intranet环境中工作,因此我可以完全控制为所有用户添加这些协议。该应用程序目前运行良好,但我被要求绕过文件的“打开/保存”对话框,因为它“烦人”和“耗时”(是的,我知道……我试图告诉他们),所以我现在处于未知领域 下面是一个不起作用的示例(在这个示例中,我使用记事本在Server2008R2和IIS7中对其进行测试): 使用上的信息,我已将以下内容添加到注册表中: H

我在使用自定义协议通过浏览器打开本地文件时遇到了一些实际问题。现在,在您向我介绍自定义协议之前,这个web应用程序将在封闭的intranet环境中工作,因此我可以完全控制为所有用户添加这些协议。该应用程序目前运行良好,但我被要求绕过文件的“打开/保存”对话框,因为它“烦人”和“耗时”(是的,我知道……我试图告诉他们),所以我现在处于未知领域

下面是一个不起作用的示例(在这个示例中,我使用记事本在Server2008R2和IIS7中对其进行测试):

使用上的信息,我已将以下内容添加到注册表中:

HKEY_CLASSES_ROOT
 opentxt
      (Default) = "URL:opentxt Protocol"
      URL Protocol = ""
      DefaultIcon
           (Default) = "C:\Windows\System32\notepad.exe,1"
      shell
           open
                command
                     (Default) = "C:\Windows\System32\notepad.exe" "%1"
所以现在,理论上,它应该像在我的html中有下面的链接一样简单

<a href="opentxt://localhost/openme.txt">Open File</a> 
该文件肯定存在于该位置(我可以使用
http://localhost/openme.txt
)读取它),并且我尝试用多种不同的格式表示链接,如所述,但就是无法使其工作


你知道我哪里出错了吗?

很简单,你把两个不同的协议搞混了

您的协议(以及您传递给记事本的Url)是
opentxt://localhost/openme.txt
。文件的工作位置是http://localhost/openme.txt。这两个不一样

HTTP是操作系统本机理解的协议,因此,记事本可以将HTTP Url传递给操作系统,操作系统将使用端口80连接到
localhost
,并发送对该资源的请求。文件被返回,记事本有它的数据。这些都是在定义HTTP行为的操作系统库中处理的

您的
opentxt
协议没有此支持,除非您对其进行编码。记事本不知道如何处理它,所以您会看到错误消息


轻松处理此问题的一种方法是创建自己的应用程序来处理协议。如果您有一个通过注册表连接的
opentxtdhandler.exe
,它将被传递
opentxt://
url,然后可以适当地处理它。这可能仅仅意味着将协议从
opentxt
更改为
http
,然后将其传递到记事本,或者可能是更复杂的事情。

抱歉-这是一个考虑不周的例子;我同意,那当然不行。然而,即使将链接更改为
,并且文件位于该位置,我仍然得到相同的结果。也许你已经了解了一些事情。我一直在玩CustomURL,可以手动成功地推送这种类型的请求。我想知道我是否真的需要拦截这些请求,然后在将其发送到目标应用程序之前对其进行清理,因为输出的内容和我期望输出的内容一定不相同。对于您提到的链接,记事本仍在传递完整的Url。记事本不知道如何处理
opentxt://C:\openme.txt
-在它了解如何处理协议之前,您需要一些东西来剥离协议。谢谢Dan-这正是我需要了解的。我没有意识到,当URL被传递时,协议也会保持连接状态——我相信我能处理删除这一点。
The filename, directory name, or volume label syntax is incorrect