【问题标题】:Load unmanaged DLL on IIS在 IIS 上加载非托管 DLL
【发布时间】:2014-03-08 00:12:08
【问题描述】:

我的托管应用程序对非托管 DLL 有一些依赖关系。即使我的非托管 DLL 部署在我的 bin 文件夹中,它们也不会被加载。 I already found a (hopefully) outdated SO post which points out two possible solutions:

  • 将 dll 添加到已知的查找路径(例如 \System32\Inetsrv)
  • 将我的 bin 文件夹添加到 PATH

但是,我不喜欢这两种解决方案,因为它基本上在我的部署文件夹之外添加了一个依赖项(=在我的管辖范围之外)。我不能让 IIS 知道加载非托管 DLL(例如通过 web.config)吗?

【问题讨论】:

  • 它不会有帮助,但你能指定你的 IIS 版本吗?
  • 当然,我使用的是 IIS 7.5
  • @Dunken 你有没有找到解决办法?

标签: iis


【解决方案1】:

您可以加载非托管 DLL,并将其所在的完整路径传递给 LoadLibraryEx

[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hReservedNull, LoadLibraryFlags dwFlags);

//...

//get the physical path of the root directory of the application
string rootPath = System.Web.HttpContext.Current.Server.MapPath("~");
string libPath = Path.Combine(rootPath, "bin", "relative path to your DLL");
var h = LoadLibraryEx(libPath, IntPtr.Zero, NativeDlls.LoadLibraryFlags.LOAD_WITH_ALTERED_SEARCH_PATH);
if (h == IntPtr.Zero)
{
    throw new Exception("Error in LoadLibrary: " + Marshal.GetLastWin32Error());
}

应将库设置为复制到构建的输出目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2017-10-16
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多