使用模拟读取图像
Posted
技术标签:
【中文标题】使用模拟读取图像【英文标题】:Reading image using impersonation 【发布时间】:2013-11-22 01:53:50 【问题描述】:我正在尝试从访问受限的位置读取图像并将其返回到我的 wpf 应用程序中的属性。问题是我似乎无法解决这个错误:
A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in PresentationCore.dll Additional information: Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
代码如下:
public BitmapImage GetImage()
var bitmap = new BitmapImage();
var impersonation = new ImpersonationManager(Resources.Username,
Resources.Domain,
Resources.Password);
using (impersonation.SafeTokenHandle)
using (var newId = new WindowsIdentity(impersonation.SafeTokenHandle.DangerousGetHandle()))
using (newId.Impersonate())
bitmap.BeginInit();
bitmap.UriSource = new Uri(@"\\restrictedpath\\to\\image.jpg", UriKind.Absolute);
bitmap.EndInit();
return bitmap;
我在其下运行此应用程序的 Windows 用户无权访问 restrictedpath
,但我用于模拟的凭据很好,否则模拟效果很好。 ImpersonationManager
只是一个包装器。
这可能吗?
【问题讨论】:
URI 不会那样工作。它需要有一个像"C:\\restrictedpath\\to\\image.jpg"
这样的驱动器号,或者更好的是@"C:\restrictedpath\to\image.jpg"
。然而,这并不能解释异常。
@Clemens 嗯,不是真的-UNC 路径工作得很好...否则您将如何访问未映射的共享驱动器?并且此代码在减去异常后工作正常。如果我可以访问该驱动器,一切都很好。完全同意@
我从真实代码中修补了这个示例并错过了。
如果是UNC路径,你应该写@"\\restrictedpath\to\image.jpg"
,其中restrictedpath
是服务器名,对吧?
是的,没错。就像我说的那样,我用真实的代码编写了这个例子,然后忘记了。
【参考方案1】:
因此,如果有人遇到这种情况,我确实想通了。我必须打开一个流来读取文件,然后将其分配给位图的流源:
public BitmapImage GetImage()
var bitmap = new BitmapImage();
var impersonation = new ImpersonationManager(Resources.Username,
Resources.Domain,
Resources.Password);
using (impersonation.SafeTokenHandle)
using (var newId = new WindowsIdentity(impersonation.SafeTokenHandle.DangerousGetHandle()))
using (newId.Impersonate())
using (Stream stream = File.OpenRead(@"\\restrictedpath\\to\\image.jpg"))
bitmap.BeginInit();
stream.Flush();
stream.Position = 0;
bitmap.StreamSource = stream;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
bitmap.Freeze();
return bitmap;
那和bitmap.Freeze()
解决了我的问题。
【讨论】:
以上是关于使用模拟读取图像的主要内容,如果未能解决你的问题,请参考以下文章
PyQt5 PyQt5安装及配置,从文件夹读取图片并显示,模拟生成素描图像
SecurityException:权限拒绝:读取(仅在模拟器上)
如何在脚本中读取不规则编号的数据文件以制作 gnuplot 图像?