如何让我的代码在模拟时访问程序集

问题描述 投票:0回答:2

我正在尝试使用

WindowsIdentity.RunImpersonated
读取共享文件夹上的图像。问题是,在模拟过程中,我的代码无法访问
System.Drawing.Common
程序集,可能是因为被模拟的用户无权访问它,我该怎么办。

WindowsIdentity.RunImpersonated(safeAccessTokenHandle,() => {
            string[] files = Directory.GetFiles(path, pattern);

            if (files.Length > 0)
            {
                foreach (string file in files)
                {
                    string[] f = file.Split('.');
                    FileStream fstream = new FileStream(file, FileMode.Open);
                    Bitmap bitmap = new Bitmap(fstream);
                    MemoryStream ms = new MemoryStream();
                    bitmap.Save(ms, ImageFormat.Jpeg);
                    byte[] byteImage = ms.ToArray();
                    model.Archive.Add(Convert.ToBase64String(byteImage));
                    fstream.Close();
                }
            }
        });

这是我得到的错误:

FileLoadException:无法加载文件或程序集“System.Drawing.Common,版本= 5.0.0.0,文化=中性,PublicKeyToken = cc7b13ffcd2ddd51”。访问被拒绝。

asp.net-core filestream assemblies impersonation
2个回答
3
投票

这对我有用,如果有人遇到这个问题 在 WindowsIdentity.RunImpersonated 之前添加这行代码

Assembly.Load("System.Drawing.Common, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51");

0
投票

您编码的位置非常需要注意。该代码必须位于两个用户都可以访问的位置。代码的默认位置是 C:\Users\Source eps。当你模拟时,你会看到Windows实际上使用该用户登录,他们甚至获得了自己的用户目录。现在,就像您无法访问其他用户的文件夹一样(除非您同意一堆弹出窗口),充当该人的代码也无法访问您的文件夹。

我的解决方案就是简单地将我的代码移至 C 之类的地方

© www.soinside.com 2019 - 2024. All rights reserved.