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服务和日志的设置?
答案 0 :(得分:4)
因为working directory of Windows services是%WinDir%\System32
。
您可以自行验证:
File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "\\TestFile.txt",
"My working directory is: " + Directory.GetCurrentDirectory());
您通常(在哪个路径中)存储Windows服务和日志的设置?
System.Environment.SpecialFolder.CommonApplicationData
以下的某处(例如C:\ProgramData\myService
)。有关详细信息,请参阅以下问题:答案 1 :(得分:2)
我意识到这是一个古老的问题,但我想提供一个答案,对于偶然发现这个问题需要答案的其他人可能会有用。
我需要弄清楚类似的东西,即从安装该服务的目录中调用可执行文件,这个问题的答案是有帮助的:
What directory does a Windows Service run in?
最终,对于那个有用的问题,这不是公认的答案,而是一个不同的答案。我使用此代码访问安装服务的目录:
Path.GetDirectoryName(Environment.GetCommandLineArgs()[0])
答案 2 :(得分:1)
相对路径基于'当前目录',AppDomain.CurrentDomain.BaseDirectory
和Environment.CurrentDirectory
不一定相同。