我使用本地系统开发了一个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总是像文件不存在但实际上它确实存在。
现在这让我烦恼不已。请帮助我为什么它不工作。它是一个服务器路径。它在我的电脑上打开了。
由于
答案 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帐户。