手机伺服用不了 file:// 链接的解决办法 2.0(兼容带空格及中文的文件名或路径)

本贴最后更新于 238 天前,其中的信息可能已经渤澥桑田

前情提要: 手机伺服用不了 file:// 链接的解决办法 1.0

前文的方法有个缺陷,就是如果文件名或路径含有空格和中文字符,就无法打开文件或资源管理器。

本文就以上缺陷做出改进,将 cmd 命令换成了 powershell 命令,经过我一晚上的折腾,终于成功。因为采用了 powershell 命令,这就意味着本文方法只适用于 Win10 及更高版本操作系统。另外,本文方法不仅仅是手机伺服可以用,PC 端经测试同样适用。

演示视频:

以下是操作步骤:

Step 1. 参考此文,在桌面新建一个 txt 文件,内容如下:

REGEDIT4

[HKEY_CLASSES_ROOT\FileOpen]
@="URL:FileOpen Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\FileOpen\DefaultIcon]
@="\"C:\\Windows\\explorer.exe\""

[HKEY_CLASSES_ROOT\FileOpen\shell]

[HKEY_CLASSES_ROOT\FileOpen\shell\open]

[HKEY_CLASSES_ROOT\FileOpen\shell\open\command]
@="powershell -windowstyle hidden \"Add-Type -AssemblyName System.Web\" ; \"$url=\\\"%1\\\"\" ; \"$url=[System.Web.HttpUtility]::UrlDecode($url)\" ; \"$url=$url.Trimstart(\\\"fileopen\\\")\" ; \"$url=$url.Trimstart(\\\"://\\\")\" ; \"$url=\\\"file:\\\"+$url\" ; explorer \"$url\""

将文件重命名为 fileopen.reg,双击运行。

Step 2. 参考此文方案二,在 %userprofile%\AppData\Local\Microsoft\Edge\User Data\AutoLaunchProtocolsComponent\组件版本\protocols.json 中增加以下内容:

{
    "origins":["http://*:6806"],
    "protocol":"fileopen"
},
{
    "origins":["http://*:6806"],
    "protocol":"cmd"
},

保存。

Step 3. 重启 Edge 浏览器。

完成。

只要在思源中使用形如 fileopen://d:/images/fileopen://d:/images/screenshot.png 这样的链接,即可直接点击打开相应的文件或文件夹。


参考文献:

URL Encode/Decode

powershell - 无法在 PowerShell 中找到类型 [System.Web.HttpUtility]

Powershell 修剪操作,如文件名,字符串,结尾,开始,空格

PowerShell 一次执行多条命令

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22378 引用 • 89573 回帖
3 操作
openAI 在 2024-03-30 16:07:15 更新了该帖
openAI 在 2024-03-27 13:31:59 更新了该帖
openAI 在 2024-03-27 13:27:42 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 都是夜猫子。哈哈。

    其实也就今天折腾这个玩意儿,不然早睡了。

  • 其他回帖
  • 实现思路其实很简单,先是对 URL 进行解码,然后再进行字符串的裁剪和拼接,得到想要的参数。

    如果有人想在别的平台,比如 linux、mac 上实现的话,按照这个思路来就对了。

  • 你也熬夜

    1 回复
  • 为避免引用文章的原文失效,我将其全文复印到此处。

    取消新版 Edge/Chrome 打开外部应用时每次的提示

    作者:mmaple7 发布时间:2024-01-14

    使用新版 Edge 或 Chrome 调用外部应用时每次都会出现要打开 xxx PROTOCOL 吗的提示。除了取消提示之外,可以通过编辑注册表来自定义默认的打开方式。此外,可以使用策略组来管理浏览器的行为,包括控制外部应用程序的自动启动和协议的处理方式。

    文章参考

    Microsoft Edge 浏览器策略文档 | Microsoft Learn
    Microsoft Edge 浏览器支持的所有策略的 Windows 和 Mac 文档

    涉及其中的策略:
    79-84 版本:
    ExternalProtocolDialogShowAlwaysOpenCheckbox 在外部协议对话框中显示“始终打开”复选框

    85 版本及后续版本
    AutoLaunchProtocolsFromOrigins 定义可以从列出的源启动外部应用程序而不提示用户的协议列表

    其他相关项
    AutoLaunchProtocolsComponentEnabled 已启用自动启动协议组件(方式二的问题 1)

    方式一:使用注册表配置策略

    可以参考下面步骤,在注册表中的策略组中设置始终使用关联应用打开相关链接.

    1. 先关闭所有 Edge 或 Chrome 浏览器
    2. 新建一个文本文件,输入或粘贴下面内容,完成后保存并退出
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
    "ExternalProtocolDialogShowAlwaysOpenCheckbox"=dword:00000001
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge]
    "ExternalProtocolDialogShowAlwaysOpenCheckbox"=dword:00000001
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
    "AutoLaunchProtocolsFromOrigins"="[{\"allowed_origins\": [\"*\"], \"protocol\": \"msoutlook\"}]"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge]
    "AutoLaunchProtocolsFromOrigins"="[{\"allowed_origins\": [\"*\"], \"protocol\": \"msoutlook\"}]"
    
    1. 将文件名修改为 cancelPromptOpenExternalApp.reg,双击运行。

    说明:

    1. Chromium 79 ~ Chromium 84 版本可以通过复选框(ExternalProtocolDialogShowAlwaysOpenCheckbox)控制是否显示提示的弹窗。
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
    "ExternalProtocolDialogShowAlwaysOpenCheckbox"=dword:00000001
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge]
    "ExternalProtocolDialogShowAlwaysOpenCheckbox"=dword:00000001
    
    1. Chromium 85 版及以后可以通过 AutoLaunchProtocolsFromOrigins 以 json 的方式更细粒度地控制协议(protocol)及该协议允许自启动的源[IP:port、域名](allowed_origins),参考
      Microsoft Edge 浏览器策略文档 | Microsoft Learn
      Microsoft Edge 浏览器支持的所有策略的 Windows 和 Mac 文档

      其中部分内容如下

    1bbf8f6953ce289576c0630eafeb0224.png

    8dfe812dc3ebd70bc64401cc5a428559.png

    方式二:使用配置文件

    Edge 打开外部应用时的提醒,可以通过“自动启动协议组件(AutoLaunchProtocolsComponent)”相关的配置文件进行控制。

    文件路径为 %userprofile%\AppData\Local\Microsoft\Edge\User Data\AutoLaunchProtocolsComponent\组件版本\protocols.json

    在 Edge 浏览器地址栏输入 edge://components/ ,可以查看组件的列表,可以找到 Edge AutoLaunch Protocols 组件的版本。

    作者的 Edge 对应组件版本如下:
    6399c3fe668aeb52ef963e577de37301.png

    因此,作者的 AutoLaunchProtocolsComponent 组件配置的路径为 C:\Users\admin\AppData\Local\Microsoft\Edge\User Data\AutoLaunchProtocolsComponent\1.0.0.8\protocols.json

    在文件中的 "allow" : [ 后追加

    {
    "origins":["*"],
    "protocol":"协议名"
    },
    

    若想要只在某网站下去除提醒,将 * 替换为网站链接。

    问题一

    如果该方式不生效,在注册表中查看 AutoLaunchProtocolsComponentEnabled 是否手动设置为不启动。参考
    Microsoft Edge 浏览器策略文档 | Microsoft Learn
    Microsoft Edge 浏览器支持的所有策略的 Windows 和 Mac 文档

    部分内容如下:
    ae1ad4cac71f306b589859d78ca795b0.png

推荐标签 标签

  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖 • 2 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • abitmean

    有点意思就行了

    30 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    167 引用 • 1513 回帖 • 1 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 683 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • 996
    13 引用 • 200 回帖 • 6 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    149 引用 • 257 回帖
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1348 回帖
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 659 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 43 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖 • 2 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 1 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 709 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 4 关注
  • 安全

    安全永远都不是一个小问题。

    199 引用 • 816 回帖
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    287 引用 • 4484 回帖 • 669 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    407 引用 • 1246 回帖 • 581 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 2 关注
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    70 引用 • 375 回帖 • 1 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 344 回帖
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    132 引用 • 1114 回帖 • 124 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    55 引用 • 85 回帖