我创建了一个非常简单的.NET Windows服务,并使用InstallUtil.exe实用程序安装了它。在这个服务中,我有一段代码:
if (File.Exists("test_file.txt")) { // Do something clever }
我在服务所在的目录中创建了一个名为test_file. txt的文件,但是代码的注解部分从未执行过......?
13z8s7eq1#
System.Diagnostics.Trace.WriteLine(Directory.GetCurrentDirectory());
将输出当前目录,将该代码放入服务的启动方法中,用DebugView等工具检查输出,就知道服务的启动文件夹了。这种简单的技术对于服务开发中的许多问题都很有用,尤其是调试服务启动时。您可能希望服务的工作文件夹是服务可执行文件所在的文件夹(我也是)。您可以使用以下代码行更改为该文件夹:
System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
8wtpewkr2#
服务从名为服务控制管理器的应用程序启动。此应用程序位于系统目录%WinDir%\System32中在64位版本的Windows 7+上,此路径实际上是:%WinDir%\SysWOW64有关详细信息,请参见Service Control Manager at MSDN。
%WinDir%\System32
%WinDir%\SysWOW64
vkc1a9a23#
你可以让它像这样工作:
string cwd = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]); Directory.SetCurrentDirectory(cwd ?? ".");
46scxncf4#
还想知道Windows服务在哪个文件夹中运行,但源代码不是我的,因此无法修改。在命令提示符中键入sc qc <service name>将显示BINARY_PATH_NAME中的文件夹。
sc qc <service name>
C:\>sc qc DESCRIPTION: Queries the configuration information for a service. USAGE: sc <server> qc [service name] <bufferSize>
查询MyService时获取:C:〉sc qc我的服务
[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
jfewjypa5#
从SC start service in folder /Start in:/开始:一个简单的替代方法是使用www.example.com--这为您提供了指定启动目录的选项。nssm.cc - this gives you the option of specifying a directory to start in.
5条答案
按热度按时间13z8s7eq1#
将输出当前目录,将该代码放入服务的启动方法中,用DebugView等工具检查输出,就知道服务的启动文件夹了。
这种简单的技术对于服务开发中的许多问题都很有用,尤其是调试服务启动时。
您可能希望服务的工作文件夹是服务可执行文件所在的文件夹(我也是)。您可以使用以下代码行更改为该文件夹:
8wtpewkr2#
服务从名为服务控制管理器的应用程序启动。此应用程序位于系统目录
%WinDir%\System32
中在64位版本的Windows 7+上,此路径实际上是:
%WinDir%\SysWOW64
有关详细信息,请参见Service Control Manager at MSDN。
vkc1a9a23#
你可以让它像这样工作:
46scxncf4#
还想知道Windows服务在哪个文件夹中运行,但源代码不是我的,因此无法修改。在命令提示符中键入
sc qc <service name>
将显示BINARY_PATH_NAME中的文件夹。查询MyService时获取:
C:〉sc qc我的服务
jfewjypa5#
从SC start service in folder /Start in:/开始:一个简单的替代方法是使用www.example.com--这为您提供了指定启动目录的选项。nssm.cc - this gives you the option of specifying a directory to start in.