我试图从限制访问的位置读取图像并将其返回到我的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
只是一个包装器。
这可能吗?
答案 0 :(得分:0)
所以,如果有人碰到这个,我确实弄明白了。我必须打开一个流来读取文件,然后将其分配给位图的流源:
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()
处理了我的问题。