相对路径在Windows服务中不起作用

时间:2015-06-04 08:54:43

标签: c#

我有点奇怪的情况。在Windows服务的onstart方法中,如果我输入以下代码:

File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "\\TestFile.txt", "Started " + AppDomain.CurrentDomain.BaseDirectory);

它有效并且在文本文件中存储:

Started C:\Users\guser\Documents\Visual Studio 2012\Projects\FreeSpaceControlService\FreeSpaceControlService\bin\Debug\

文本文件在调试目录中创建。

但是如果我使用这样的代码而不是上面的代码(在同一个地方):

  File.AppendAllText("TestFile.txt", "Started");        

在与上面相同的目录中创建的文本文件不是。为什么不在同一目录中创建它? (现在看来它是在WIndows / System32中创建的,我检查它 - 有两个可执行文件吗?为什么第一个返回Debug目录?)

您通常(在哪个路径中)存储Windows服务和日志的设置?

3 个答案:

答案 0 :(得分:4)

因为working directory of Windows services%WinDir%\System32

您可以自行验证:

File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "\\TestFile.txt",
                   "My working directory is: " + Directory.GetCurrentDirectory());
  

您通常(在哪个路径中)存储Windows服务和日志的设置?

  • 设置:在Windows注册表中。
  • 日志:在Windows事件日志中。
  • 您的服务可能需要的任何其他文件:System.Environment.SpecialFolder.CommonApplicationData以下的某处(例如C:\ProgramData\myService)。有关详细信息,请参阅以下问题:
    What is the significance of the ProgramData folder in Windows?

答案 1 :(得分:2)

我意识到这是一个古老的问题,但我想提供一个答案,对于偶然发现这个问题需要答案的其他人可能会有用。

我需要弄清楚类似的东西,即从安装该服务的目录中调用可执行文件,这个问题的答案是有帮助的:

What directory does a Windows Service run in?

最终,对于那个有用的问题,这不是公认的答案,而是一个不同的答案。我使用此代码访问安装服务的目录:

Path.GetDirectoryName(Environment.GetCommandLineArgs()[0])

答案 2 :(得分:1)

相对路径基于'当前目录',AppDomain.CurrentDomain.BaseDirectoryEnvironment.CurrentDirectory不一定相同。