Windows服务运行的目录是什么?

Guy*_*Guy 76 .net windows-services

我创建了一个非常简单的.NET Windows服务,并使用InstallUtil.exe实用程序安装它.

在服务中,我有一段代码:

if (File.Exists("test_file.txt"))
{
   // Do something clever
}
Run Code Online (Sandbox Code Playgroud)

我在与服务相同的目录中创建了一个名为test_file.txt的文件,但代码的注释部分从未被执行过......?

Dir*_*mar 94

System.Diagnostics.Trace.WriteLine(Directory.GetCurrentDirectory());
Run Code Online (Sandbox Code Playgroud)

将输出当前目录.将该代码放在服务的启动方法中,并使用DebugView之类的工具检查输出.然后您将知道您的服务的启动文件夹.

这种简单的技术对于服务开发中的许多问题都很有用,特别是对于调试服务启动.

您可能希望服务的工作文件夹是服务可执行文件所在的文件夹(我也是如此).您可以使用以下代码行更改为该文件夹:

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
Run Code Online (Sandbox Code Playgroud)


Jef*_*eff 74

服务从名为Service Control Manager的应用程序启动.此应用程序位于系统目录%WinDir%\ System32中

在Windows 7 Ultimate - 64位上,此路径实际上是:%WinDir%\ SysWOW64

有关详细信息,请参阅MSDN上的服务控制管理器.

感谢Harper Shelby指出了原始帖子的问题.

  • 对我来说(在64位Windows 7上),它是`%WinDir%\ SysWOW64` (2认同)

yan*_*taq 12

你可以这样工作:

string cwd = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);
Directory.SetCurrentDirectory(cwd ?? ".");
Run Code Online (Sandbox Code Playgroud)