C# 如何从Windows服务动态加载DLL

C# 如何从Windows服务动态加载DLL,c#,reflection,windows-services,C#,Reflection,Windows Services,通过以下步骤,可以轻松地从应用程序动态加载DLL: System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); 然后调用Assembly类的CodeBase()方法来获取应用所在的目录。接下来,我将调用Directory.GetFiles()以获取具有DLL扩展名的所有文件的列表,然后调用Assembly.LoadFile() 我正在尝试做同样的事情,只是为了Windows服务

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

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


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

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


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

为什么需要这样做?我不明白为什么这是必要的。然而,根据经验,我似乎记得某项服务的目录似乎显示为您的windows系统文件夹。他的问题可能是DLL与该服务不在同一文件夹中,因此这不起作用。完全同意。但由于.NET不允许从某些位置加载DLL,这可能会打开一个全新的蠕虫罐。但是,使用Assembly.LoadFrom可能会有所帮助