Сканирование изображения C # WIA завершается сбоем с HRESULT: 0x80070050

Я надеюсь, что кто-то сталкивался с этим - я пытаюсь захватить изображения со сканера документов с помощью WIA, однако на случайных машинах при попытке передать результат изображения - WIA сообщает "Файл существует. - HRESULT: 0x80070050)". На всех машинах с этой проблемой первоначальное использование программного обеспечения было успешным.

Я могу успешно подключиться к сканеру, запросить имя, производителя и т. д.

Я определил, что могу успешно отсканировать изображение, если запущу код под альтернативной учетной записью пользователя (используя щелчок правой кнопкой мыши и запуск от имени администратора). Однако запуск кода под той же учетной записью пользователя с повышенными привилегиями приводит к той же ошибке.

ПРИМЕЧАНИЕ. Исключение возникает в Item1.Transfer, поэтому до этого момента я еще не предоставил 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 сохраняет временный файл во время захвата изображения, о чем я не знаю, и не может перезаписать предыдущее сканирование. Кто-нибудь знает, где это может быть?


person Brinkin    schedule 25.05.2011    source источник


Ответы (2)


Решено.

Оказывается, WIA фактически хранит захваченные изображения как временные файлы во временной папке профиля пользователя, поэтому:

Path.GetTempPath()

или C:\Users\USER_PROFILE\AppData\Local\Temp\

Файлы хранятся в формате imgXXXX.tmp

В нашем случае - причина, по которой это вызвало проблему, которая, похоже, нигде в сети не задокументирована, заключается в том, что мы опрашивали сканер каждые несколько секунд - создавая временный файл, так как есть только 4x, может быть макс. 65K временных файлов до того, как WIA выйдет из строя.

Настройка подпрограммы для удаления старых файлов изображений из этой временной папки немедленно решила проблему.

person Brinkin    schedule 26.05.2011

Я столкнулся с этой же проблемой при попытке использовать WIA для чтения изображений с камеры. Правильным решением является правильное удаление WIA.ImageFile. Это очищает файл tmp.

Marshal.ReleaseComObject(Image1);

Я нашел это на CodePrjoct, ссылка

person Jason Maxwell    schedule 18.06.2013