可以通过以下步骤轻松地从应用程序动态加载DLL:
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
然后我调用Assembly类的CodeBase()方法来获取应用程序所在的目录。接下来,我将调用Directory.GetFiles()来获取具有DLL扩展名的所有文件的列表,然后调用Assembly.LoadFile()。
我正在尝试做同样的事情,但对于Windows服务。编写Windows服务安装程序时,我确保还包括所有动态加载的DLL。问题是我不知道上面我用于应用程序的步骤的等价物。服务在哪里安装?哪个目录?
答案 0 :(得分:1)
如果服务是在托管代码中实现的,您可以按照与问题中概述的步骤相同的步骤进行操作。该服务仍然是托管应用,System.Reflection.Assembly.GetExecutingAssembly().Location
将提供您的程序集的位置,这是您的服务。然后,您可以使用GetDirectoryName
查找服务安装目录。
答案 1 :(得分:0)
我假设您正在使用安装程序项目模板。您可能不需要使用反射,而是考虑实现安装程序类,并在提交事件期间验证所需的程序集是否在目标目录中。
http://msdn.microsoft.com/en-us/library/system.configuration.install.installer.aspx