【问题标题】:how to load some dlls over main dll in windows service?如何在 Windows 服务的主 dll 上加载一些 dll?
【发布时间】:2012-06-18 05:53:34
【问题描述】:

我对使用主 DLL 的 Windows 服务有一个奇怪的问题,名称为: Process.dll 。 Windows 服务调用 onstart():

Process client = new Process();

client.Method();

在这个方法 Process.dll 中使用了另一个 dll。但是 Windows 服务没有找到 a、b、c dll。不开机!简单的服务工作正常,但在架构下无法正常工作,而不是 atart Windows 服务。你能帮我如何加载另一个dll。或任何解决方案?如何根据以下架构编写代码? (a,b,c dll 是静态引用。)

【问题讨论】:

  • Process.dll是如何加载a.dll、b.dll和c.dll的?它们是静态引用的吗?或者在运行时动态加载(在这种情况下请显示加载它们的代码)?所有这些程序集都存在于 Windows 服务的工作文件夹中吗?
  • a,b,c dll 是静态引用。
  • 在process.dll中创建console应用并调用方法,可以调试发现问题所在。
  • @Damith:一切正常,控制台或窗口形式。不工作的 Windows 服务...
  • @Neros:我不明白对不起:(,

标签: c# .net visual-studio-2010 windows-services


【解决方案1】:

试试这个:

    Assembly a = Assembly.LoadFrom("YourDLL.dll");

    Type t = a.GetType("YourType");

    object obj = Activator.CreateInstance(t);

【讨论】:

    【解决方案2】:

    我发现当尝试从 Windows 服务动态加载文件(无论是配置文件还是 DLL)时,您需要指定要加载的文件的位置,即使它与服务的 EXE 位于同一目录中.

    这是我用来动态获取 Windows 服务目录位置的 sn-p,然后您可以使用 aliboy38 中的代码 sn-p 来加载你的 DLL。

    var exePath = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
    
    Assembly a = Assembly.LodFrom(Path.Combine(exePath, "YourDLL.dll"));
    
    Type t = a.GetType("YourType");
    
    object obj = Activator.CreateInstance(t);
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多