我正在使用StreamReader
以下方法读取与可执行文件位于同一目录中的文件:
StreamReader reader=new StreamReader(".\\file.txt"); //NOTE: 2nd backslash is escape character in C#
在调试环境中执行此操作时,它会很好地读取文件,但是当我安装服务时,它将尝试在其中读取文件,C:\Windows\System32\
就像将工作目录设置为该路径一样,但是在服务属性中没有工作目录选项。我猜它正在使用sc.exe的工作目录。
有没有办法让我使用相对文件路径将其解析为当前可执行文件的位置?因为服务可能会根据部署放置在不同的位置。
是的,服务的工作目录为%WinDir%\System32
。GetModuleFileName()
还会返回不正确的结果,因为您的服务是由另一个可执行文件托管的(偶然地也放置在该目录中)。
您必须找到执行程序集及其位置,描述起来比做起来要冗长:
string assemblyPath = Assembly.GetExecutingAssembly().Location;
现在,只需提取目录名称并与所需文件合并即可:
string path = Path.Combine(Path.GetDirectoryName(assemblyPath), "file.txt");
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句