67

我有一个 Windows 服务,它应该在其当前目录中查找配置文件。

所以我使用directory.getcurrentdirectiry()但不是我返回的服务目录

c:\windows\system32

知道为什么以及如何获取服务目录吗?

4

5 回答 5

160

您可以通过在代码中包含此行来将当前目录设置为运行服务的目录:

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);

这其中的重要部分是:

System.AppDomain.CurrentDomain.BaseDirectory

这将返回您的服务运行所在目录的路径。

于 2012-04-30T14:43:25.767 回答
33

试试这个:

System.Reflection.Assembly.GetEntryAssembly().Location
于 2012-04-29T21:43:50.543 回答
18

从完整路径获取目录:

var location = System.Reflection.Assembly.GetEntryAssembly().Location;
var directoryPath = Path.GetDirectoryName(location);

与编写 Windows 服务相比,这是一个非常愚蠢的问题 :)

于 2013-07-19T11:00:01.027 回答
13

不要使用Directory.GetCurrentDirectory(). 我在返回C:\Windows\System32时遇到了同样的问题。改用这个:

Path.GetDirectoryName(Application.ExecutablePath);

于 2016-04-14T18:23:59.423 回答
0

如果您的目标是 .NET Core 或 .NET Standard,您也可以使用AppContext.BaseDirectory

请参阅https://docs.microsoft.com/en-us/dotnet/api/system.appcontext.basedirectory

于 2021-06-21T11:28:12.493 回答