如何从shell扩展加载DLL?

时间:2013-04-04 08:51:37

标签: dll wix system.data.sqlite regasm shell-extensions

我编写了一个小的shell扩展,存根工作,但希望它从SQLite数据库中读取一些信息。

SQLite needs 2 DLLs

  • System.Data.SQLite.dll:仅管理核心程序集
  • SQLite.Interop.dll:native interop assembly

过去,我已经使用这两个DLL成功构建了桌面应用程序,方法是将它们放在与.exe文件相同的文件夹中。 但是在shell扩展的情况下,没有.exe文件,所以我应该把这些DLL放在哪里?

注意:现在我使用Regasm部署shell扩展,但我计划将来使用WiX部署它们。

1 个答案:

答案 0 :(得分:0)

正如您可能已经知道的那样,找到了与.exe及其.exe.config文件中的指令相关的程序集。这意味着你的.dll将不得不“手动”加载它的组件。

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveLocally);

static Assembly ResolveLocally(object sender, ResolveEventArgs args)
{
    string path = Path.Combine(
        Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
        new AssemblyName(args.Name).Name + ".dll"
        );
    if (!File.Exists(path))
    {
       return null;
    }

    return Assembly.LoadFrom(path);
}

这与此处基本相同:How to add folder to assembly search path at runtime in .NET?