C#WIA图像扫描失败,HRESULT:0x80070050

我希望有人遇到过这种情况 – 我正在尝试使用WIA从文档扫描仪捕获图像,但是在尝试传输图像结果时在随机机器上 – WIA报告“文件存在。 – HRESULT:0x80070050”。 在具有此问题的所有计算机上,软件的初始使用是成功的。

我能够成功连接到扫描仪,查询名称,制造商等。

我已经确定我可以成功扫描图像,如果我在另一个用户帐户下运行代码(使用右键单击以管理员身份运行)。 但是,在具有提升的权限的同一用户帐户下运行代码会导致相同的错误。

注意:在Item1.Transfer上发生exception – 所以直到这一点我还没有为WIA提供文件路径,所以这不是它所指的文件。

WIA.DeviceManager DeviceManager1 = new WIA.DeviceManagerClass(); WIA.Device Scanner = DeviceManager1.DeviceInfos[i].Connect(); WIA.Item Item1 = null; foreach (WIA.Item CurrentItem in Scanner.Items) { Item1 = CurrentItem; break; } WIA.ImageFile Image1 = new WIA.ImageFile(); //Attempt To Capture Scan Image1 = (WIA.ImageFile)Item1.Transfer(WIA.FormatID.wiaFormatJPEG); //Save To File Image1.SaveFile(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + @"\scan" + DateTime.Now.Ticks + ".jpg"); 

最合乎逻辑的答案是WIA在图像捕获期间存储临时文件 – 我不知道 – 并且它无法覆盖先前的扫描。 有谁知道这可能是什么?

解决了。

事实certificate,WIA实际上将捕获的图像存储为Users profile temp文件夹中的临时文件,因此:

 Path.GetTempPath() 

或C:\ Users \ USER_PROFILE \ AppData \ Local \ Temp \

文件以imgXXXX.tmp格式存储

在我们的例子中 – 这导致一个问题的原因,似乎没有在网上的任何地方记录,是我们每隔几秒轮询扫描仪 – 创建一个临时文件,因为只有4x,可以有一个WIA之前的65K临时文件将会出错。

设置例程以清除此临时文件夹中的旧图像文件立即解决了该问题。

当我尝试使用WIA从相机设备上读取图像时,我遇到了同样的问题。 正确的解决方案是正确处理WIA.ImageFile。 这会清理tmp文件。

 Marshal.ReleaseComObject(Image1); 

我在CodePrjoct上找到了这个链接