service的行为与命令行不同

时间:2010-01-13 20:46:04

标签: windows windows-services

我在Windows Server 2003上运行。这是我的问题: 我写了一个Perl脚本来自动将一些文件从我的Server机器复制到一些网络驱动器。我正在使用xcopy来复制文件。我的问题是权限 如果我从命令行运行脚本,它可以工作,所有副本都成功。 如果我尝试使用服务运行脚本,则所有副本都会失败。这个服务是我写的一个程序,它接受脚本并运行它。在后台,它所做的就是调用C函数'system',它运行的命令就是我可以从命令行运行的。

我已经尝试了很多这方面的变化来弄清楚它有什么问题但是我不明白为什么服务不会像我从命令行运行它那样运行。
我将服务设置为与我在命令行中使用的用户一样运行。

我还试图将网络驱动器映射为具有写入权限的用户,但结果是相同的。手动脚本工作,从服务,它没有。

任何建议表示赞赏。 谢谢 贝

3 个答案:

答案 0 :(得分:0)

该服务可能正在作为系统运行,无法访问网络驱动器。在“服务”设置中,将服务更改为在您的帐户(或具有相关权限/映射的帐户)下运行。

答案 1 :(得分:0)

当服务运行时,它使用您在Windows的服务管理器中指定的任何凭据。默认的LOCAL SERVICE可能没有访问要复制的资源的权限。

使用执行复制所需的最小权限集创建一个新用户帐户,并将服务配置为在该帐户下运行。

答案 2 :(得分:0)

我确实找出了问题(我认为),这与我后来在另一篇文章中找到的内容相符:

https://serverfault.com/questions/4623/windows-can-i-map-a-network-drive-for-a-service-account < ...持久性驱动器映射仅在交互式登录期间恢复,该服务不使用。我认为获得服务使用网络驱动器的唯一方法是将该服务映射到驱动器本身,或者为我们提供UNC路径而不是映射驱动器。>

我所做的是使用该服务映射驱动器,这似乎有效。事实证明,如果我映射驱动器并保存凭据,那么我可以稍后访问驱动器而无需再次映射它。我不知道为什么这种方法似乎有效。

- 谢谢大家的帮助。