如何让Windows服务访问共享网络文件夹?

时间:2016-10-26 23:29:11

标签: windows networking service directory shared

我有一个将在客户端服务器上运行的Windows服务。此服务需要访问位于不同共享文件夹(Y:\和Z:\)中的2个文件夹,这两个文件夹位于不同的计算机上(共计3台计算机)。

目前,该服务只能查看位于同一台计算机上的文件。当我在共享文件夹上执行IO.Directory.Exists()时,它返回false。

以下是我尝试过的事情:

  1. 作为网络服务运行
  2. 作为本地系统运行
  3. 作为本地服务运行
  4. 使用\\ 192.168.1.xx \ path \ to \ folder
  5. 测试是否存在
  6. 使用Y:\和Z:\
  7. 测试存在
  8. 在具有相同用户名和密码的其他计算机上创建用户
  9. 验证文件夹为所有人提供了完全访问权限
  10. 还没有任何效果,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在Active Directory环境中,网络服务和本地系统都可以访问域中的其他计算机;只需要将服务器配置为授予对域中客户端计算机帐户(即COMPUTERNAME$帐户)的访问权限。如果使用UNC路径,将自动建立连接。您仍然无法使用在另一个登录会话中建立的驱动器号,但在大多数情况下,UNC路径将执行此操作。

在独立环境中,它有点棘手。唯一可靠的方法是明确建立网络连接,您可以使用WNetAddConnection2或任何其他替代方案来建立网络连接。 (或者,如果您无法调用Win32 API,则可以使用net use命令。)在任何一种情况下,一旦建立连接,您就可以使用UNC路径。通常无需映射驱动器号。

如果由于某种原因必须有驱动器号,通常最好使用WNetUseConnection函数而不是WNetAddConnection2。可以配置为自动选择驱动器号,这样您就不必尝试确定哪些字母已在使用中。

请注意,根据具体情况,可能需要在服务器上使用帐户的长用户名,例如SERVERNAME\USERNAMEDOMAINNAME\USERNAME(如果是域帐户)。出于某种原因,Windows 10客户端似乎特别挑剔。