Windows 上挂载 WebDAV

接着上文 折腾了一下阿里云盘 + AList + Rclone + AnimePaste 继续倒腾。

上文使用了 rclone 将 WebDAV 挂载到本地目录，而且必须在 Terminal 里手动运行一下脚本，并且 Terminal 还不能退出，所以我们现在要让他开机自动在后台启动。

更新 1：试用了一周后，体验不是很好，rclone 挂载的本地目录非常不稳定。时常出现卡死，且长时间未响应，不容易自动恢复；挂载点会因为关机不当，rclone 未正常终止等原因，导致无法被占用，无法重新挂载。搜了搜发现 Windows 原生就有相关的实现，例如 OneDrive 就在背后使用了 WebDAV。

更新 2：又试用了一段时间 Windows 原生提供的 WebDAV，依然不好用。问题有偶尔发生的开机自动挂载失败，需要手动点一下，估计原因是它挂载的时候 AList 仍未启动。其次，在挂载刚刚启动或者 AList 重启后，偶尔发生读取文件会失败一次。第三，用 VS Code 打开后，不知道为什么会给 AList 大量并发请求，容易发生各种奇怪的问题。第四，用 VS Code 编辑文本文件时，会发生缓存不一致的问题。最后，现在换用了 RaiDrive，目前似乎有观察到缓存不一致的问题，但可能 VS Code 有一部分锅，其它除了没充钱开机带了个广告外，没有问题，体验最佳。

方案一：RaiDrive

官网：https://www.raidrive.com/

下载，安装，在 UI 上点一点，过程比较傻瓜。

方案二：Windows 原生提供的网络驱动器映射

在文件资源管理器中，右键 此电脑，选择 映射网络驱动器...。

选择你想要的驱动器，输入你的本地 / 远程 AList 的地址。

输入你的 AList 用户名，密码。

其它 WebDAV 同理。

可能出现问题

可能需要在控制面板开一下 WebDAV，位于 控制面板 - 程序 - 启用或关闭 Windows 功能，选项路径如下图所示。

如果你局域网内的 WebDAV 是 HTTP 协议，不是 HTTPS 协议，会出现 “找不到网络名” 的错误。你需要打开 注册表编辑器，找到 HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\WebClient\\Parameters，修改键BasicAuthLevel 值为 2，即同时允许 HTTP 与 HTTPS。

方案三：rclone + nssm

挂载脚本

挂载脚本需要稍作修改：

将 rclone 替换为绝对路径；

指定 --config 的路径（你可以通过 rclone config file 查看当前的配置文件路径）；

挂载到一个单独的磁盘似乎比挂载到一个目录稳定一些？

Copy
# mount-anime.ps1

D:\bin\rclone mount "alist:/" "R:" `
--config "C:\Users\<你的系统用户名>\AppData\Roaming\rclone\rclone.conf" `
--header "Referer:https://www.aliyundrive.com/" `
--vfs-cache-mode full --vfs-read-chunk-size-limit 1G --vfs-read-chunk-size 512M `
--cache-dir "D:\.cache\rclone" --dir-cache-time 1m --buffer-size 128M `
-o UserName="<你的系统用户名>" -o GroupName="Authenticated Users"

注意：
后面的 nssm 在运行该脚本时，不是从你的当前用户启动的，所以没有 PATH 环境变量；
其次因为登录用户的缘故，mount 的目录权限有问题，命令中的最后一行参考 Mount Permission (Windows) 似乎能修复我自己遇到的权限问题。

nssm

下载 nssm，它是一个 Windows 的 Non-Sucking Service Manager。

下载 nssm 2.24 解压后，把可执行文件复制到某个在 PATH 的目录下（这里我们统一用的是 D:\bin\）。然后输入以下命令打开 nssm 的复古 GUI，创建一个名为 mount-anime 的服务。

Copy
nssm install mount-anime

填入以下配置：

Application - Path：PowerShell 的绝对路径（比如 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe）；

Application - Startup directory：随意；

Application - Arguments：上文创建的挂载启动脚本绝对路径；

I/O：建议将 stdout / stderr 重定向到某个文件方便 DEBUG。

创建完成后，在管理员模式的 Terminal 下启动服务。

Copy
nssm start mount-anime