我有一个用VB.NET开发的Windows服务。此Windows服务每晚8点从文件C:\ftpDocs
复制到Y:\FtpDocs
文件夹中选择文件。
Y:
是映射驱动器,\\sourceServer\Output files
。当我从VB.NET Windows应用程序而不是Windows服务运行相同的代码时,它工作得非常好。但是从服务中,访问\\sourceServer\Output
的访问被拒绝错误。
似乎Windows服务从C:\windows\system32
运行。出于这个原因,我尝试将当前目录更改为C:\ftpService
(这是我的应用程序所在的文件夹)。
要访问映射的驱动器,我提供的用户标识和密码不是我的Windows用户标识和密码。您认为这就是为什么它无法从Windows服务访问它的原因吗?
如果是,它如何在Windows应用程序中运行?这个问题现在不会在过去的一个月内消失。
答案 0 :(得分:4)
每个用户维护当前映射的驱动器 - 对于我来说,能够访问您拥有凭据的共享上的文件只是因为我们都在同一时间登录,这是一个很大的禁忌时间。
您的服务需要使用某种保存的凭证来映射共享本身(如果您愿意,可以对它们进行硬编码,尽管这不是非常安全并且代表可维护性负担)。如何执行此操作的一个很好的示例是here - 但是,我没有使用此代码,我刚刚阅读了该文章。
答案 1 :(得分:2)
通常,Windows服务在ID下运行,其ID无权访问网络上的文件。尝试在可以访问网络文件的域帐户下运行Windows服务。确保此帐户可以访问将要读取和写入的网络和本地文件夹/文件。
此外,您还需要使用UNC路径,而不是映射驱动器。不会为服务安装映射的驱动器。