【问题标题】:Access Files Remotely on Windows using a Windows Service使用 Windows 服务在 Windows 上远程访问文件
【发布时间】:2011-11-24 16:32:27
【问题描述】:

我有一个执行.bat 文件的Windows 服务。这个.bat 文件执行一些读取一些文件信息的Sava 代码。我需要访问的文件不在服务运行的同一台机器上。所以我应该使用像G:\ 这样的映射来访问它们。

即使在我运行服务时G:\ 上存在文件,文件exists() 和文件canRead() 也总是返回false。

如果我手动执行.bat,一切正常,但我需要使用服务来执行它。

服务正在与有权读取此G:\ 映射上的所有文件的用户一起运行。

有没有人知道什么地方出了问题?作为 Windows 服务运行时,为什么我无法访问这些远程文件?

有问题的操作系统是Windows XP

【问题讨论】:

  • 尝试执行“\\servername\c$\path_to_bat_file”,其中 c 是远程机器上的驱动器,当然,必须替换为 bat 文件所在的驱动器名称驻留(无映射)。当然,这是假设所有访问权限都已到位。 servername 是您用来映射驱动器的名称。

标签: java windows file


【解决方案1】:

问题通常是运行该服务的用户没有相同的 G: 驱动器以及相同的访问权限。

我建议您以运行该服务的用户身份登录,然后查看该用户所看到的内容。

【讨论】:

  • 运行该服务的用户是我手动执行.bat时登录的同一用户。但是,如果我在登录时运行该服务,我会遇到同样的问题。不过,我可以使用资源管理器访问 G: drive
  • 可以改用 UNC 路径吗?
  • 你确实逃脱了你的背影,不是吗?
  • 是的,我愿意。不知道还能尝试什么...我也尝试过在 linux 中使用 file:// ,但没有帮助:(
  • 在最坏的情况下,您可以使用像 jcifs.samba.org 这样不需要驱动器号的 CIFS 库。
【解决方案2】:

驱动器映射不会在会话之间共享,并且服务会话不会像交互式会话那样自动重新建立驱动器映射。您应该在批处理文件中放置一个 net use 命令,以在服务会话中显式建立驱动器映射。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    相关资源
    最近更新 更多