如何从Windows服务访问映射目录

如何从Windows服务访问映射目录

根据经验法则,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

我采取的步骤:

  1. 创建一个包含命令的 bat 文件net use z: \servername\sharedfolder /persistent:yes
  2. 创建计划任务
    • 将用户设置为“系统”
    • 添加操作来运行bat文件
  3. 手动运行任务(无需设置计划)

笔记:该驱动器将显示为“已断开网络驱动器 (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$

相关内容