【问题标题】:Windows service - get current directoryWindows 服务 - 获取当前目录
【发布时间】:2012-05-09 17:08:18
【问题描述】:

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

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

c:\windows\system32

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

【问题讨论】:

    标签: c# windows-services working-directory


    【解决方案1】:

    试试这个:

    System.Reflection.Assembly.GetEntryAssembly().Location
    

    【讨论】:

    • 这一行给了我serviec正在运行的目录,但也给了程序集本身...sonthig like - c:\serviceDir\app.exe 我只想要目录
    • Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)
    • 这对我来说是正确的答案。谢谢@VhsPiceros!
    【解决方案2】:

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

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

    其中重要的部分是:

    System.AppDomain.CurrentDomain.BaseDirectory
    

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

    【讨论】:

    • System.AppDomain.CurrentDomain.BaseDirectory 为我工作,它提供了目录。 System.Reflection.Assembly.GetEntryAssembly().Location 返回目录加上可执行文件的名称
    • 这个答案更适合不同的场景。我使用 NCrunch,接受的答案在那里无济于事。
    • 与 Assembly.Location 等其他解决方案相比,这也适用于更广泛的环境(asp.net、winform 和 windows 服务)。
    • System.AppDomain.CurrentDomain.BaseDirectory 为我工作。我还使用它作为 Windows 服务和控制台应用程序(在 Linux 容器内)进行了测试,并且在这两种情况下都可以正常工作!谢谢! :D
    【解决方案3】:

    从完整路径获取目录:

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

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

    【讨论】:

      【解决方案4】:

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

      Path.GetDirectoryName(Application.ExecutablePath);

      【讨论】:

      • 显然您需要添加 System.Windows.Forms.dll 才能使其正常工作。
      • 我得到“名称应用程序在当前上下文中不存在”
      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        • 1970-01-01
        相关资源
        最近更新 更多