2012-03-02 32 views
0

的DLL可以很容易地動態地從一個應用程序加載,通過以下步驟:如何動態地從Windows服務加載的DLL

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); 

然後我叫Assembly類的代碼庫()方法來獲取目錄該應用的位置。接下來,我將調用Directory.GetFiles()以獲取DLL擴展名的所有文件的列表,然後調用Assembly.LoadFile()。

我想爲Windows服務做同樣的事情。當寫入Windows服務安裝程序時,我確保所有將動態加載的DLL也包含在內。問題是我不知道用於應用程序的上述步驟的等價物。服務在哪裏安裝?哪個目錄?

+0

爲什麼你需要這樣做呢?我不明白爲什麼這是必要的。從經驗來看,我似乎記得服務的目錄似乎是作爲你的Windows系統文件夾出現的。 – 2012-03-02 00:39:15

回答

1

如果該服務在託管代碼中實現的,你可以按照幾乎相同的步驟,你已經在你的問題概括。該服務仍然是一個託管應用程序,System.Reflection.Assembly.GetExecutingAssembly().Location將提供您的程序集的位置,這是您的服務。然後,您可以使用GetDirectoryName來查找服務安裝目錄。

+0

他的問題可能是dll與服務不在同一個文件夾中,因此這不起作用。 – 2012-03-02 03:49:35

+0

完全同意。但是這可能會打開全新的蠕蟲,因爲.NET不允許從某些位置加載dll。但是,使用Assembly.LoadFrom可能有助於http://blogs.msdn.com/b/suzcook/archive/2003/09/19/57248.aspx – user1234883 2012-03-02 06:05:27