在Windows服务C#中访问网络路径

时间:2015-06-28 07:23:09

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

我使用本地系统开发了一个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总是像文件不存在但实际上它确实存在。

现在这让我烦恼不已。请帮助我为什么它不工作。它是一个服务器路径。它在我的电脑上打开了。

由于

1 个答案:

答案 0 :(得分: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 ),并且您'允许访问ressource,而 NT AUTHORITY \ SYSTEM 不是。

为您开发的Windows服务创建一个特殊服务帐户通常是一种很好的做法,并且只授予此用户所需的权限(最小权限)。也许向系统管理员询问服务用户。

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

  

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