【问题标题】:Accessing Network Path in Windows Service C#在 Windows 服务 C# 中访问网络路径
【发布时间】:2015-06-28 07:23:09
【问题描述】:

我开发了一个使用本地系统作为帐户的 Windows 服务。我用过 文件的网络路径

FileInfo fi = new FileInfo(@"\\epm-server\penDocuments_LabMeds\" + Convert.ToString(dr["mrn"]) + "\\SyncedXML\\" + Convert.ToString(dr["xmlfile"]));
if (!fi.Exists)
    boolFileNotFound = true;

从数据库构建的文件的动态路径。

当我在调试模式下运行 Windows 服务时它工作正常,但是当我安装它时,fileNotExists 总是返回 TRUE,就像文件不存在但实际上它确实存在一样。

这让我很烦恼。请帮助我为什么它不起作用。它是一个服务器路径。它正在我的电脑中打开。

谢谢

【问题讨论】:

  • 如果我在网站上使用它就可以了。但它不适用于 Windows 服务。
  • 所以权限就像@MitchWheat 已经说过的那样...尝试阅读:stackoverflow.com/questions/265953/… 以及:stackoverflow.com/questions/458363/…
  • 我可以从我的计算机访问路径,那么可能是什么原因?在网络上,我需要使用哪些凭据?它是服务器上的公共共享文件夹。
  • @vickyshazad 如前所述,这可能是权限问题。运行您的服务的用户无权访问您尝试访问的文件。向您的服务用户帐户授予权限,或使用模拟访问文件。

标签: c# .net file service windows-services


【解决方案1】:

您是否注意到 SyncedXML (\\SyncedXML\\) 前后的双反斜杠? 这可能是您的错误的原因。

此外,我会在这种情况下使用 string.Format 来减少无意中添加不需要的字符:

var path = string.Format(@"\\epm-server\penDocuments_LabMeds\{0}\SyncedXML\{1}", dr[mrn], dr[xmlfile]);
var fi = new FileInfo(path);

编辑:

如果它与权限相关,那么很可能您的本地系统帐户(服务正在其上下文中运行)不允许访问 epm-server。

如果您直接打开该路径或在调试模式下运行该服务,因为这是在您的用户上下文中发生的(例如 YOURDOMAIN\vickyshazad),并且您' re 允许访问资源,而 NT AUTHORITY\SYSTEM 不允许。

为您开发的 Windows 服务拥有一个特殊的服务帐户并仅授予此用户所需的权限(最低权限)通常是一个好习惯。也许可以向您的系统管理员询问服务用户。

本地系统 (NT AUTHORITY\SYSTEM) 是一个高权限帐户,一般不建议使用 (see MSDN)。

大多数服务不需要如此高的权限级别。如果您的服务不需要这些权限,并且它不是交互式服务,请考虑使用 LocalService 帐户或 NetworkService 帐户。

【讨论】:

  • 它也没有用。是的,我可以使用 string.Format。谢谢你的建议。实际上问题在于许可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
相关资源
最近更新 更多