Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows服务使用StreamReader访问无效目录_C#_Windows Services_Working Directory - Fatal编程技术网

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

C# Windows服务使用StreamReader访问无效目录,c#,windows-services,working-directory,C#,Windows Services,Working Directory,我正在使用具有以下方法的StreamReader读取与可执行文件位于同一目录中的文件: StreamReader reader=new StreamReader(".\\file.txt"); //NOTE: 2nd backslash is escape character in C# 当我在调试环境中执行此操作时,它会很好地读取文件,但当我安装服务时,它会尝试在C:\Windows\System32\中读取文件,就像工作目录设置为该路径一样,但在服务属性中没有工作目录选项。我猜它使用的是s

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

StreamReader reader=new StreamReader(".\\file.txt"); //NOTE: 2nd backslash is escape character in C#
当我在调试环境中执行此操作时,它会很好地读取文件,但当我安装服务时,它会尝试在C:\Windows\System32\中读取文件,就像工作目录设置为该路径一样,但在服务属性中没有工作目录选项。我猜它使用的是sc.exe的工作目录

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

是的,是%WinDir%\System32。由于您的服务也由碰巧放置在该目录中的另一个可执行文件托管,因此也将返回不正确的结果

您必须找到正在执行的程序集及其位置,描述的时间要比执行的时间长:

string assemblyPath = Assembly.GetExecutingAssembly().Location;
现在,只需提取目录名并与您想要的文件组合:

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

谢谢,但正确的解决方案是下面的答案。