Windows服务无法访问网络位置(UNC)路径

时间:2018-08-25 15:44:09

标签: c# .net networking unc topshelf

我有一个Windows服务,该服务会连续轮询文件夹中是否有新文件。对于本地目录来说,它可以正常工作。但是当涉及到同一网络中另一个系统上的UNC路径时,该服务无法访问它似乎显示的文件夹。引用了此帖子https://serverfault.com/a/881272;它指出我需要以当前登录的用户身份运行该服务。我该怎么做?

我希望使用该服务监视的路径是

\DESKTOP-PC\Users\me\myfolder

请咨询

更新:

我已经使用topshelf开发了该服务。我想轮询同一网络中另一台本地计算机上的文件夹。我转到网络位置,双击计算机名,要求输入凭据,然后输入用户名和密码远程计算机,我可以为该用户(在资源管理器中)访问系统上的文件。

现在,当我将服务设置为在此计算机下以本地计算机用户身份运行时,它无法访问可使用资源管理器访问的远程UNC路径。我尝试将其安装为远程计算机用户,但失败。

myService.exe install -username:DESKTOP-REMOTE\myname -password:mypassword

4 个答案:

答案 0 :(得分:4)

如果尝试使用desktop-remote\myname帐户运行服务,则可能会失败。本地计算机只喜欢属于自己的帐户。

我要做的是扭转它。使远程计算机共享一个文件夹供您的计算机轮询。这样,远程机器就可以控制它正在发布的数据,就像对象的属性为privatepublic一样。如果可以让知道地址\\desktop-remote\my-not-so-secret-folder\的任何人都可以读取它,请进行设置以使任何人都可以读取。如果您比较机密,请使用$为文件夹添加后缀,例如:\\desktop-remote\my-secret-folder$。现在它不可见,但仍然可以到达。
您还可以创建一个有权访问该文件夹的特殊帐户。

然后,让您的服务在本地计算机上运行您选择的任何帐户(具有网络访问权限)。让它尝试使用特殊帐户连接到远程文件夹。

(我了解到,很难的方法是,没有域的计算机和域中的计算机之间读取共享文件夹略有不同;任何人都无法读取。至少在WindowsXP中是这样。我从那时起,就不再需要共享文件夹了。)

HTH

答案 1 :(得分:3)

  1. 打开“控制面板”>“管理工具”>“服务”窗口,位于 您的Windows服务器。
  2. 停止Windows服务。
  3. 打开“属性”>“登录”对话框。
  4. 将服务用户帐户更改为目标用户帐户。
  5. 启动服务。

enter image description here

如果您正在Visual Studio中开发服务,并且想要模拟其他帐户,则还可以按shift +右键单击devenv.exe,然后单击“以其他用户身份运行”。

还要确保您指定了文件夹的完整路径,并且所使用的帐户具有该文件夹的完整权限。

答案 2 :(得分:0)

将服务设置为作为本地系统帐户运行时,它无法访问使用资源管理器和本地计算机帐户可访问的远程UNC路径。

仅仅是因为资源管理器管理登录的用户凭据,所以,您仅将UNC路径凭据添加到了LOGGED用户。

将其更改为“本地系统帐户”时,不会存储共享的用户凭据。

尝试创建一个没有密码过期的本地用户,然后允许其访问共享。

您需要做的就是使用此新帐户注册设置Windows服务。

Security

答案 3 :(得分:0)

您可以看看模拟。另外,如果该服务以本地用户身份运行,则将有助于在文件夹所在的计算机上以相同的密码创建同一用户。

在这里看看(这篇文章中的OP遇到同样的问题,他/她已将共享文件夹授予“所有人都可以完全控制”。

https://serverfault.com/questions/177139/windows-service-cant-access-network-share