如何从Windows服务动态加载DLL

时间:2012-03-02 00:35:08

标签: c# reflection windows-services

可以通过以下步骤轻松地从应用程序动态加载DLL:

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

然后我调用Assembly类的CodeBase()方法来获取应用程序所在的目录。接下来,我将调用Directory.GetFiles()来获取具有DLL扩展名的所有文件的列表,然后调用Assembly.LoadFile()。

我正在尝试做同样的事情,但对于Windows服务。编写Windows服务安装程序时,我确保还包括所有动态加载的DLL。问题是我不知道上面我用于应用程序的步骤的等价物。服务在哪里安装?哪个目录?

2 个答案:

答案 0 :(得分:1)

如果服务是在托管代码中实现的,您可以按照与问题中概述的步骤相同的步骤进行操作。该服务仍然是托管应用,System.Reflection.Assembly.GetExecutingAssembly().Location将提供您的程序集的位置,这是您的服务。然后,您可以使用GetDirectoryName查找服务安装目录。

答案 1 :(得分:0)

我假设您正在使用安装程序项目模板。您可能不需要使用反射,而是考虑实现安装程序类,并在提交事件期间验证所需的程序集是否在目标目录中。

http://msdn.microsoft.com/en-us/library/system.configuration.install.installer.aspx