2009-12-17 126 views
1

我有一个在VB.NET中开发的Windows服务。此Windows服务每晚晚上8点将文件从我的C:\ftpDocs复制到Y:\FtpDocs文件夹中选择一个文件。无法从VB.NET访问网络驱动器Windows服务

Y:是一个映射驱动器,它是\\sourceServer\Output files。当我从VB.NET Windows应用程序而不是Windows服务运行相同的代码时,它工作得很好。但从服务中,它正在抛出访问被拒绝访问\\sourceServer\Output错误。

看来Windows服务从C:\windows\system32运行。为此,我尝试将当前目录更改为C:\ftpService(这是我的应用程序所在的文件夹)。

要访问映射的驱动器,我提供了不是我的Windows用户标识和密码的用户标识和密码。你认为这是它无法从Windows服务访问它的原因吗?

如果是,它是如何从Windows应用程序工作?这个问题在过去一个月内不会消失。

回答

4

当前映射的驱动器是每个用户维护的 - 这对我来说是一个很大的禁忌,因为我们都可以通过登录同时。

您的服务需要使用某种保存的证书映射共享本身(如果您愿意,您可以对它们进行硬编码,尽管这不是非常安全并且代表了可维护性负担)。如何做到这一点的一个很好的例子是here - 虽然,我没有使用这个代码,我刚刚阅读文章。

+0

谢谢Dathan,我一定会试试这个。再次感谢。 – rowmark 2009-12-17 03:35:12

+0

感谢大山。它像一个魅力。 – rowmark 2009-12-18 03:37:02

2

通常,Windows服务在其凭据未被授权访问网络上的文件的标识下运行。尝试在可访问网络文件的域帐户下运行Windows服务。确保此帐户可以访问将要读取和写入的网络和本地文件夹/文件。

另外,您需要使用UNC路径,而不是映射驱动器。映射的驱动器不会为服务装入。

+0

tvanfosson, 我也试过UNC Path。但它没有帮助。接下来的事情是我打算让我的NetworkID添加到映射的驱动器文件夹中。 – rowmark 2009-12-17 03:25:03

+0

我知道这是一个旧的答案,但值得注意的是,您应该永远不要使用用户凭据运行服务 - 如果用户退出并且您禁用了他们的帐户,该怎么办?当我开始做一份工作时,我被带到了老开发公司的电脑。他几年前离开了。他的帐户很活跃,他的个人电脑一天24小时保持。数百个业务关键流程依赖于他的机器/信誉 - 他们甚至无法更改密码,因为密码全都是硬编码的。不用说,我快速离开了。 – Basic 2012-02-01 22:14:48

+0

就个人而言,我使用每个应用程序一个帐户 - 一个域的acct。对于使用网络或特定于服务器的服务。 SQL是'Server \ SQLService',Sophos AV是'Domain \ SophosService'。您应该确保普通用户无法以(DC/Server上的)这些帐户登录。之后,您可以为特定应用授予共享/其他资源的权限。 – Basic 2012-02-01 22:16:55

相关问题