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