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

标签 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;

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

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

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

谢谢

最佳答案

您是否注意到 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。

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

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

本地系统 (NT AUTHORITY\SYSTEM) 是一个高度特权的帐户,一般情况下不建议使用 ( see MSDN )。

Most services do not need such a high privilege level. If your service does not need these privileges, and it is not an interactive service, consider using the LocalService account or the NetworkService account.

关于c# - 在Windows服务C#中访问网络路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31097184/

相关文章:

c# - MEF(托管可扩展性框架)是否进行 "duck"打字?

c# - Windows 应用程序出错

php - 如何解析服务器上 .html 文件中的 PHP 语法?

c# - 如何在安装程序之前终止进程?

c# - 无法将引用从 C# PCL 添加到 F# PCL(VS 2015 更新 1)

python - 如何按照列表的顺序重命名文件夹中的多个文件

php - 确定文件是否超过 X 行?

java - Java和C#的构造函数执行顺序及其对代码移植的实际影响

c# - 方法类型重载

c# - 动态继承