【问题标题】:How to dynamically load DLLs from a Windows Service如何从 Windows 服务动态加载 DLL
【发布时间】:2012-03-02 00:35:08
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你为什么需要这样做?我不明白为什么这是必要的。然而,根据经验,我似乎记得服务的目录似乎是您的 Windows 系统文件夹。

标签: c# reflection windows-services


【解决方案1】:

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

【讨论】:

  • 他的问题可能是dll与服务不在同一个文件夹中,因此这不起作用。
  • 完全同意。但这可能会打开全新的蠕虫罐,因为 .NET 不允许从某些位置加载 dll。但是,使用 Assembly.LoadFrom 可能会有所帮助 blogs.msdn.com/b/suzcook/archive/2003/09/19/57248.aspx
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-05-16
    • 2011-09-06
    • 2012-06-18
    • 2012-11-08
    • 2010-09-30
    相关资源
    最近更新 更多