gpt4 book ai didi

iis - 在 IIS 上加载非托管 DLL

转载 作者:行者123 更新时间:2023-12-03 21:40:12 24 4
gpt4 key购买 nike

我的托管应用程序对非托管 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)吗?

    最佳答案

    您可以加载非托管 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());
    }
    库应设置为复制到构建的输出目录。

    关于iis - 在 IIS 上加载非托管 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21681004/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com