根据经验法则,Windows 服务无法访问映射驱动器,因此您必须使用 UNC 路径。
我确信有一种方法可以解决这个问题,以便 Windows 服务可以访问映射驱动器,但我无法在任何地方找到它。
我的具体情况是我在 Windows 2008 服务器上运行 Tomcat7。
答案1
使用映射目录或 UNC 路径的替代方法是使用符号链接。
NTFS 符号链接 (symlinks) 可以引用 UNC 路径,但与快捷方式不同,因为没有重定向到请求的位置。如果您创建如下所示的符号链接...
mklink /D C:\myLink \\127.0.0.1\c$
... 那么当您打开C:\myLink
所在文件夹的地址将是C:\myLink
而不是\\127.0.0.1\c$
,如果 myLink 是快捷方式而不是符号链接,您将获得该地址。如果您的应用程序与 UNC 路径存在兼容性问题,这一点很重要。
此外,符号链接存在于文件系统中,不需要在登录后重新创建,因为普通映射驱动器需要(通常是自动化的),因此可以供 Windows 服务使用。
答案2
我找到了一个解决这个问题的方法,看起来效果很好:https://stackoverflow.com/a/7867064/669645
我采取的步骤:
- 创建一个包含命令的 bat 文件
net use z: \servername\sharedfolder /persistent:yes
- 创建计划任务
- 将用户设置为“系统”
- 添加操作来运行bat文件
- 手动运行任务(无需设置计划)
笔记:该驱动器将显示为“已断开网络驱动器 (Z:)“但仍可供所有登录用户和 Windows 服务访问
答案3
作为对已经提供的优秀答案的补充,并且作为对上述有关使用 powershell 的问题的回答,我想补充一下,Powershell 相当于已接受的答案:
mklink /D C:\myLink \\127.0.0.1\c$
这是:
New-Item -Path C:\myLink -ItemType SymbolicLink -Target \\127.0.0.1\c$