0

我已經創建了Windows服務。我使用Windows安裝程序進行服務設置。 我有一個XML文件就像一個配置文件。每當我調試Windows服務與附加調試項目,它工作正常。但安裝後,我可以看到事件說無法找到C:\ Windows \ system32中的example.xml文件。這是一個重複的問題。任何人都可以告訴我這是怎麼回事。或者有什麼建議?Windows服務設置後無法檢測到XML文件

回答

2

這不是安裝程序問題。 Windows服務始終以System32作爲當前目錄啓動。在啓動任何服務之前,將此行添加到Program.cs中的Main()方法中。

Environment.CurrentDirectory = new FileInfo(Assembly.GetExecutingAssembly().FullName).DirectoryName; 
+0

+1:可能的方法,我也推薦@ spender's(+ 1)方法來明確計算配置文件的路徑,而不是依賴於當前文件夾(即使你設置了它 - 其他一些代碼可能會改變它並加載將再次以更混亂的方式被打破)。 – 2013-03-14 20:52:36

+0

我建議這種方法的原因是,如果海​​報不理解這種行爲,他可能會有其他依賴下游。 – 2013-03-14 21:04:41

2

最有可能的文件僅僅是不是你正在尋找它。

有可能你的代碼在「當前工作文件夾」,這在VS調試過程是一樣的應用,但在/起服務的命令行是不同的情況。

確保您的代碼加載從你期望的文件是(旁邊應用程序即)文件位置,而不是從一些相對路徑(如「將myfile.xml」)。

+0

我試過這樣做我事件複製xml到安裝目錄但問題是一樣的。有沒有辦法讓安裝程序將xml文件複製到system32文件夾? – nzdev 2013-03-14 20:07:39

+1

將XML複製到System32不是最佳實踐。在您的服務代碼中,您需要使用反射來獲取正在運行的程序集的位置。將其轉換爲目錄全名並執行Path.Combine()以獲取XML文件的正確位置。 – 2013-03-14 20:17:32

+0

謝謝克里斯託弗...... – nzdev 2013-03-14 21:07:30

-1

的問題是,你的服務沒有以管理員身份運行。如果該服務未以管理員身份運行,則無法讀取system32文件夾下的文件。

更改服務屬性以管理員身份運行。這應該解決這個問題。

+0

這不完全正確。很多system32都可以被非管理員讀取。 – 2013-03-14 20:06:27

+0

我的服務已經以管理員身份運行。 – nzdev 2013-03-14 20:08:01

1

你爲什麼要將東西保存在Windows文件夾中?除非有一個真的很好的理由這樣做,這是。在您的應用程序運行的相同位置安裝您的配置並獲取文件路徑:

var folderPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
var configPath = Path.Combine(folderPath, configFileName); 
+0

Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetEntryAssembly()。Location)); ConfigurationPath = @「config_file.xml」;使用此工作爲我感謝...我有你的想法。 – nzdev 2013-03-14 21:06:36

+0

@nzdev,請考慮正式投票的克里斯托弗Painter的解決方案,你基本上使用... – 2013-03-14 21:14:50

+0

你如何做到這一點對我無關緊要。重要的部分是瞭解Windows服務從System32開始。 – 2013-03-14 21:29:38