Windows服务使用StreamReader访问无效目录

时间:2014-11-06 11:42:32

标签: c# windows-services working-directory

我正在使用StreamReader使用以下方法读取与我的可执行文件位于同一目录中的文件:

StreamReader reader=new StreamReader(".\\file.txt"); //NOTE: 2nd backslash is escape character in C#

当我在调试环境中执行此操作时,它会正确读取文件,但是当我安装服务时,它会尝试读取C:\Windows\System32\中的文件,就像工作目录设置为该路径一样,但是服务属性没有工作目录选项。我猜它正在使用sc.exe的工作目录。

有没有办法可以使用相对文件路径将其解析为当前可执行文件的位置?因为服务可能会根据部署放在不同的位置。

1 个答案:

答案 0 :(得分:0)

是的,working directory of a service%WinDir%\System32GetModuleFileName()也会返回错误的结果,因为您的服务由另一个可执行文件托管(偶然也会放在该目录中)。

你必须找到执行程序集及其位置,描述的时间比要做的更长:

string assemblyPath = Assembly.GetExecutingAssembly().Location;

现在只需提取目录名称并与您想要的文件结合使用:

string path = Path.Combine(Path.GetDirectoryName(assemblyPath), "file.txt");