我开发了一个使用本地系统作为帐户的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/