我很確定Windows服務在使用InstallUtil.exe進行安裝時獲取C:\ winnt(或類似)作爲其工作目錄。有什麼方法可以訪問或以其他方式捕獲(在安裝時)服務最初安裝的目錄?目前我手動輸入app.exe.config文件,但這是可怕的手動,感覺像一個黑客。如何使用C#找到Windows服務的安裝目錄?
有沒有一種編程方式,無論是在運行時還是安裝時間,以確定服務的安裝位置?
我很確定Windows服務在使用InstallUtil.exe進行安裝時獲取C:\ winnt(或類似)作爲其工作目錄。有什麼方法可以訪問或以其他方式捕獲(在安裝時)服務最初安裝的目錄?目前我手動輸入app.exe.config文件,但這是可怕的手動,感覺像一個黑客。如何使用C#找到Windows服務的安裝目錄?
有沒有一種編程方式,無論是在運行時還是安裝時間,以確定服務的安裝位置?
您可以使用反射來獲取正在執行的程序集的位置。這裏有一個簡單的步驟,設置工作目錄執行的程序集使用反射的位置:
String path = System.Reflection.Assembly.GetExecutingAssembly().Location;
path = System.IO.Path.GetDirectoryName(path);
Directory.SetCurrentDirectory(path);
你的意思是你想要包含程序集的目錄嗎?如果是這樣,那很簡單:使用Assembly.Location
。
我不會嘗試更改該過程的工作目錄雖然 - 我不會感到驚訝,如果這有令人討厭的副作用,如果確實允許你這樣做。
InstallUtil.exe
在安裝時調用ServiceInstaller.Install()
應用程序。
覆蓋它,將其添加到項目的Installers
列表中,並獲得您需要的任何信息。
我不知道Directory.SetCurrentDirectory
方法。通常我會這樣做:
Environment.CurrentDirectory = System.AppDomain.CurrentDomain.BaseDirectory;
雖然很晚,但它可以幫助某人。 \ Windows \ System32下\路徑:我用AppDomain.CurrentDomain.BaseDirectory
string someFilePath = AppDomain.CurrentDomain.BaseDirectory + @"\Resources\SomeResource.xml";
AppDomain.CurrentDomain.BaseDirectory了在窗口服務實際上isntalled,不是C目錄解決了這個問題。
我後來看到@Ramon已經發布了相同的解決方案。
謝謝,喬恩。你是對的,這個問題的措辭不是很正確,所以我改變了它。 – endian 2009-01-29 14:49:20
So Jon,這是否已經得到證實,一旦安裝和/或運行,或者是否有辦法在Service INSTALL期間設置工作文件夾,就不會想要更改服務的工作文件夾,以便您能夠使用相對路徑訪問文件/文件夾,而不是絕對路徑?我看到了與我的服務相同的東西,這些東西幾乎是作爲測試/調試的exe文件編寫的,然後定義一個符號並編譯將其編譯爲服務,但它總是用完%SYSTEMROOT%\ System32 .. – LarryF 2013-02-20 23:54:15
@LarryF:我不知道有什麼方法可以改變用於服務的工作目錄,不。這並不意味着沒有辦法這樣做,但我不知道一個。 – 2013-02-21 06:44:45