【发布时间】:2012-05-09 17:08:18
【问题描述】:
我有一个 Windows 服务应该在其当前目录中查找配置文件。
所以我使用directory.getcurrentdirectiry(),但我返回的不是服务目录
c:\windows\system32
知道为什么以及如何获取服务目录吗?
【问题讨论】:
标签: c# windows-services working-directory
我有一个 Windows 服务应该在其当前目录中查找配置文件。
所以我使用directory.getcurrentdirectiry(),但我返回的不是服务目录
c:\windows\system32
知道为什么以及如何获取服务目录吗?
【问题讨论】:
标签: c# windows-services working-directory
试试这个:
System.Reflection.Assembly.GetEntryAssembly().Location
【讨论】:
您可以通过在代码中包含以下行来将当前目录设置为运行服务的目录:
System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
其中重要的部分是:
System.AppDomain.CurrentDomain.BaseDirectory
这将返回您的服务运行所在目录的路径。
【讨论】:
System.AppDomain.CurrentDomain.BaseDirectory 为我工作,它提供了目录。 System.Reflection.Assembly.GetEntryAssembly().Location 返回目录加上可执行文件的名称
从完整路径获取目录:
var location = System.Reflection.Assembly.GetEntryAssembly().Location;
var directoryPath = Path.GetDirectoryName(location);
与编写 Windows 服务相比,这是一个非常愚蠢的问题 :)
【讨论】:
不要使用Directory.GetCurrentDirectory()。我在返回 C:\Windows\System32 时遇到了同样的问题。改用这个:
Path.GetDirectoryName(Application.ExecutablePath);
【讨论】:
如果您的目标是 .NET Core 或 .NET Standard,您也可以使用 AppContext.BaseDirectory。
见https://docs.microsoft.com/en-us/dotnet/api/system.appcontext.basedirectory
【讨论】: