【问题标题】:Relative path not working in windows service相对路径在 Windows 服务中不起作用
【发布时间】:2015-08-18 19:08:39
【问题描述】:

我的情况有点奇怪。如果我输入以下代码,则在 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 服务和日志的设置?

【问题讨论】:

  • window服务中的环境变量与登录时的环境变量不一样。必须将服务的所有者更改为以用户身份运行,而不是管理员身份。

标签: c#


【解决方案1】:

因为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?

【讨论】:

    【解决方案2】:

    我意识到这是一个老问题,但我想提供一个答案,以防其他人偶然发现这个问题并需要答案。

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

    What directory does a Windows Service run in?

    最终,有用的不是该问题的公认答案,而是不同的答案。我用这段代码访问了安装服务的目录:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 稍微解释一下彼此的含义以及与 Windows 服务的关系将不胜感激
      • 是的,但它all has been done before
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 2017-07-12
      • 2013-10-22
      • 1970-01-01
      • 2023-04-04
      • 2013-02-19
      相关资源
      最近更新 更多