我創建了一個非常簡單的.NET Windows服務,並使用InstallUtil.exe實用程序安裝它。Windows服務運行在什麼目錄?
在服務我有一段代碼,例如:
if (File.Exists("test_file.txt"))
{
// Do something clever
}
我創建了一個名爲test_file.txt在相同的目錄服務,但代碼的註釋部分文件永不執行...?
我創建了一個非常簡單的.NET Windows服務,並使用InstallUtil.exe實用程序安裝它。Windows服務運行在什麼目錄?
在服務我有一段代碼,例如:
if (File.Exists("test_file.txt"))
{
// Do something clever
}
我創建了一個名爲test_file.txt在相同的目錄服務,但代碼的註釋部分文件永不執行...?
服務從名爲Service Control Manager的應用程序啓動。此應用程序住在系統目錄%WINDIR%\ SYSTEM32
在Windows 7旗艦版 - 64位,這條路居然是:%WINDIR%\ Syswow64資料
欲瞭解更多信息,請參閱Service Control Manager at MSDN。
感謝Harper Shelby指出原始帖子的問題。
System.Diagnostics.Trace.WriteLine(Directory.GetCurrentDirectory());
將輸出當前目錄。將該代碼放入服務的啓動方法中,並使用DebugView之類的工具檢查輸出。然後你會知道你的服務的啓動文件夾。
這個簡單的技術對於服務開發中的許多問題很有用,特別是調試服務啓動。
您可能預計服務的工作文件夾將成爲服務可執行文件所在的文件夾(我也是如此)。您可以使用下面的代碼行更改到該文件夾:
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
這是否運行服務對文件正確的權限的用戶? – CSharpAtl 2009-05-19 21:07:03