Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从shell扩展加载DLL?_Dll_Wix_System.data.sqlite_Regasm_Shell Extensions - Fatal编程技术网

如何从shell扩展加载DLL?

如何从shell扩展加载DLL?,dll,wix,system.data.sqlite,regasm,shell-extensions,Dll,Wix,System.data.sqlite,Regasm,Shell Extensions,我已经编写了一个小的shell扩展,存根可以工作,但是希望它从SQLite数据库读取一些信息 : System.Data.SQLite.dll:仅管理核心程序集 SQLite.Interop.dll:本机互操作程序集 在过去,我成功地使用这两个DLL构建了桌面应用程序,方法是将它们放在与.exe文件相同的文件夹中。 但是对于shell扩展,没有.exe文件,所以我应该把这些DLL放在哪里 注意:现在我使用部署shell扩展,但我计划将来使用部署它们。您可能已经知道,程序集是相对于.exe及其

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

:

  • System.Data.SQLite.dll
    :仅管理核心程序集
  • SQLite.Interop.dll
    :本机互操作程序集
在过去,我成功地使用这两个DLL构建了桌面应用程序,方法是将它们放在与
.exe
文件相同的文件夹中。
但是对于shell扩展,没有
.exe
文件,所以我应该把这些DLL放在哪里


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

您可能已经知道,程序集是相对于.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);
}