我们有专为Google Chrome设计的应用,我们需要添加指向网络文件共享的链接。很遗憾,出于安全考虑,Chrome拒绝file:// protocol
。我们希望设置自定义协议以允许此功能。
我认为这样做的好方法是打电话给探险家。以下是我们添加的注册表项:
[HKEY_CLASSES_ROOT\MyApp\DefaultIcon]
@="\"C:\\Windows\\explorer.exe\""
[HKEY_CLASSES_ROOT\MyApp\shell]
[HKEY_CLASSES_ROOT\MyApp\shell\open]
[HKEY_CLASSES_ROOT\MyApp\shell\open\command]
@="\" C:\\Windows\\explorer.exe\" \"%1\""
目前,我们收到一条错误消息,指出协议无效。任何人都可以协助纠正这个问题吗?
非常感谢你们。
答案 0 :(得分:1)
@ Wolfram Schmied,
我刚刚使用CMD在您的计算机上写了一种解决方法:
REGEDIT4
[HKEY_CLASSES_ROOT\IntranetFileLauncher]
@="URL:IntranetFileLauncher Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\IntranetFileLauncher\DefaultIcon]
@="\"C:\\Windows\\explorer.exe\""
[HKEY_CLASSES_ROOT\IntranetFileLauncher\shell]
[HKEY_CLASSES_ROOT\IntranetFileLauncher\shell\open]
[HKEY_CLASSES_ROOT\IntranetFileLauncher\shell\open\command]
@="cmd /c set url=\"%1\" & call set url=%%url:intranetfilelauncher:=%% & call start explorer file:%%url%%"
上面的代码与您的代码基本相同,除了最后一行使用cmd.exe打开文件/文件夹命令。 用伪代码:打开commandpromt,将给定的文件路径作为变量'url'传递,通过剥离协议标识符来更改变量'url',最后使用剥离的文件路径打开资源管理器
我希望这会有所帮助。
答案 1 :(得分:0)
我在Windows 8 / Firefox上使用了以下内容。
this MSDN article中介绍了注册自定义协议的正确方法。
可悲的是,您无法将此直接应用于Windows资源管理器。如果你这样做,你会发现资源管理器开始产生副本,直到你的记忆或你的耐心耗尽,你必须注销才能停止它。原因是处理协议的应用程序传递整个链接,包括协议规范。 I.,如果你有链接
localdir:D:\somefolder
,
结果通话不会是
explorer D:\somefolder
,
但是
explorer localdir:D:\somefolder
。
这显然已经完成,因此相同的应用程序可以处理多个协议。但是Explorer并没有意识到它是为了处理请求,而是重新启动解决过程,这使得恶性循环处于运动状态。
为了解决这个问题,你调用一个简单的帮助应用程序,从参数中删除协议规范,然后用清理后的字符串调用资源管理器。
作为一个例子,我创建了一个简单的Java类Stripper
。
import java.io.IOException;
public class Stripper {
public static void main(String[] args) {
String stripped = args[0].substring("localdir:".length());
try {
Runtime.getRuntime().exec("C:\\Windows\\explorer.exe "+stripped);
}
catch (IOException e) { /* error handling */ }
}
}
以下是将.reg文件添加到注册表所需的密钥。这假设Stripper位于fol D:\Stripper
。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\localdir]
@="URL: localdir Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\localdir\shell]
[HKEY_CLASSES_ROOT\localdir\shell\open]
[HKEY_CLASSES_ROOT\localdir\shell\open\command]
@="cmd /c \"cd /d d:\\Stripper & java Stripper %1\""
该命令调用命令行解释器,告诉它首先切换到包含我们帮助器的目录,然后调用JRE来执行它。它有点尴尬,但它确实有效。
使用原生.exe文件,command
键可能如下所示:
[HKEY_CLASSES_ROOT\localdir\shell\open\command]
@="<somepath>Stripper.exe %1"
这是一个快速的肮脏解决方案,您显然希望添加检查和平衡以及可能更多的机制,但一般方法看起来可行。
答案 2 :(得分:0)
这里的任务相同,首先是与@mdbxz相同的解决方案,然后是使用VBScript以不显示cmd黑框的方式:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\explorer]
@="URL:VIR Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\explorer\shell]
[HKEY_CLASSES_ROOT\explorer\shell\open]
[HKEY_CLASSES_ROOT\explorer\shell\open\command]
@="mshta vbscript:Close(Execute(\"CreateObject(\"\"WScript.Shell\"\").Run Join(Array(\"\"iexplore.exe\"\",Replace(\"\"%1\"\",\"\"explorer\"\",\"\"https\"\"))), 1, True\"))"
这些问题是,如果我们在资源管理器中单击相同的链接,它将处理相同的内容,因此它会打开一个新窗口,而不仅仅是跳转到该链接。还有一个问题,如果我们要使用协议打开给定的应用程序。
我们可以将新协议注册到资源管理器,以便将其转换为https吗?然后我们就不需要替换协议了。