Windows服务运行在什么目录?

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

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

if (File.Exists("test_file.txt")) { // Do something clever } 

我已经创build了一个名为test_file.txt文件在同一目录中的服务,但代码的评论部分永远不会被执行…?

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

在Windows 7旗舰版 – 64位这个path实际上是: %WinDir%\ SysWOW64

有关更多信息,请参阅MSDN上的服务控制pipe理器 。

感谢Harper Shelby指出了原始post的问题。

 System.Diagnostics.Trace.WriteLine(Directory.GetCurrentDirectory()); 

会输出当前目录。 把这个代码放到你的服务的启动方法中,并使用像DebugView这样的工具来检查输出。 然后你会知道你的服务的启动文件夹。

这个简单的技术在服务开发中会遇到许多问题,特别是debugging服务启动。

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

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

你可以像这样工作:

 string cwd = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]); Directory.SetCurrentDirectory(cwd ?? "."); 

也想知道在哪个文件夹中运行Windows服务,但是源代码不是我的,所以不能修改它。 在命令提示符下键入sc qc <service name>显示BINARY_PATH_NAME中的文件夹。

 C:\>sc qc DESCRIPTION: Queries the configuration information for a service. USAGE: sc <server> qc [service name] <bufferSize> 

当查询MyService得到时:

C:> sc qc MyService

 [SC] QueryServiceConfig SUCCESS SERVICE_NAME: MyService TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 3 DEMAND_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : "D:\Routines\MyService\MyService.exe" LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : MyService DEPENDENCIES : SERVICE_START_NAME : LocalSystem