2010-07-19 44 views
5

我有一個安裝到C:\ Windows \ System32的Windows服務。它有一個通常的.config文件,其中存儲了一些應用程序設置。我有另一個應用程序將一些值寫入此配置。 發生錯誤加載配置文件:參數「exePath」是無效的,當我運行這個程序,它在這條線ExePath在ConfigurationManager.OpenExeConfiguration中是無效異常

var config = ConfigurationManager.OpenExeConfiguration(serviceExePath);

異常說拋出異常。參數名稱:exePath

當我把我的Windows服務到另一個文件夾一切都好!是否由於某些訪問違規規則或類似的行爲?有沒有辦法使用System32文件夾爲我的服務並打開其配置?

操作系統:Windows 7 64位系統

+0

你能解釋一下爲什麼你把它在system32?通常情況下,你會把它放到Program Files子目錄或類似的目錄中,因此解釋使用System32的目標可能有助於獲得更好位置的建議 – 2010-07-20 05:24:27

回答

6

這是一個文件位置一個糟糕的選擇。該目錄屬於Windows,它不適合您自己的應用程序。首先,您需要管理員權限才能在該目錄中打開文件。如果沒有清單來觸發UAC提示,您不會得到這些信息。

另一方面,該目錄在x64版本的Windows上進行了虛擬化。試圖訪問文件的32位應用程序將被重定向到c:\ windows \ syswow64。

如果您發佈堆棧跟蹤,我可能會更準確。但是,不要這樣做。

6

請注意,儘管參數的名稱是'exePath',您應該傳入.config文件的名稱,因此您可能需要根據serviceExePath文件夾中的內容附加'.config'。

http://msdn.microsoft.com/en-us/library/ms224437.aspx

exePath

類型:System.String

配置文件的路徑。配置文件與可執行文件位於同一目錄中。

既然這樣,我的感覺它試圖加載實際.exe文件作爲配置文件,這當然解釋了爲什麼認爲它是無效的:)

+1

從.NET 3.5及更高版本中,鏈接中的「exePath」註釋提供的是「可執行文件(exe)文件的路徑」。我想他們已經足夠聰明,從中找到.config文件。 – Zack 2015-08-24 21:10:23

+0

@扎克不錯,很好。 – 2015-08-25 00:44:09