C#WIA图像扫描失败,HRESULT:0x80070050
本文关键字:HRESULT 0x80070050 失败 图像 扫描 C#WIA | 更新日期: 2023-09-27 17:57:32
我希望有人发现了这一点-我正试图使用WIA从文档扫描仪捕获图像,但在尝试传输图像结果时,在随机机器上-WIA报告"文件存在。-HHRESULT:0x80070050)"。在所有出现此问题的机器上,软件的首次使用都是成功的。
我能够成功连接到扫描仪,查询名称、制造商等。
我已经确定,如果我在另一个用户帐户下运行代码(使用右键单击以管理员身份运行),我可以成功扫描图像。但是,在具有提升权限的同一用户帐户下运行代码会导致相同的错误。
注意:第1项发生异常。传输-所以到目前为止,我还没有向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在图像捕获过程中存储了一个临时文件——我不知道——它无法覆盖以前的扫描。有人知道这可能在哪里吗?
已解决。
事实证明,WIA实际上将捕获的图像作为临时文件存储在用户配置文件临时文件夹中,因此:
Path.GetTempPath()
或C:''Users''USER_PROFILE''AppData''Local''Temp''
文件以imgXXXX.tmp 格式存储
在我们的案例中,这导致了一个问题,这个问题似乎没有在网络上任何地方记录下来,原因是我们每隔几秒钟就对扫描仪进行一次轮询,创建一个临时文件,因为只有4x,在WIA出现错误之前,最多可以有65K个临时文件。
设置一个例程从这个临时文件夹中清除旧的图像文件立即解决了这个问题。
我在尝试使用WIA从相机设备读取图像时遇到了同样的问题。正确的解决方案是处理WIA。ImageFile正确。这将清理tmp文件。
Marshal.ReleaseComObject(Image1);
我在CodePrjoct上找到了这个,链接