. net程序集从UNC路径加载失败,在64位上没有修改权限

本文关键字:64位 权限 修改 程序集 UNC 路径 失败 加载 net | 更新日期: 2023-09-27 18:16:07

当我尝试从64位进程加载。net程序集时,如果加载程序集的用户没有足够的访问权限,则无法找到它们。

从32位进程加载相同的程序集没有问题,如果运行64位进程的用户被赋予修改权限,则加载也没有问题。

dll文件位于文件共享(我假设它是NTFS,但不完全确定)并从UNC路径加载。

dll不是在正常的。net程序中加载,而是通过Python在Python中使用。Net和Matlab中通过正常的Matlab .Net集成。这个问题在Python和Matlab中是相同的,所以这表明问题在。net方面。

. net程序集从UNC路径加载失败,在64位上没有修改权限

有一个版本的AppDomain.CurrentDomain.Load()可以接受包含要加载的DLL的文件内容的byte[]。使用它,你可以手动加载任何你可以访问的。net程序集,无论是在本地驱动器,网络,压缩,资源,下载等。

在c#中可以这样使用:

public static Assembly LoadAssembly(string filename)
{
    var content = System.IO.File.ReadAllBytes(filename);
    return AppDomain.CurrentDomain.Load(content);
}

甚至不打算把它翻译成Python。. NET或Matlab.

由于文件读取不直接涉及程序集加载,因此不会触发加载远程程序集的安全问题。还具有附加的优点,DLL文件的锁定时间永远不会超过将其完全读入内存所需的时间。