C # WIA Сканирование изображений завершается неудачно с HRESULT: 0x80070050 - PullRequest
2 голосов
/ 25 мая 2011

Я надеюсь, что кто-то сталкивался с этим - я пытаюсь захватить изображения со сканера документов с помощью 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 хранит временный файл во время захвата изображения - о чем я не знаю - и этоневозможно переписать предыдущее сканирование.Кто-нибудь знает, где это может быть?

Ответы [ 2 ]

5 голосов
/ 26 мая 2011

Решено.

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

Path.GetTempPath()

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

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

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

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

1 голос
/ 19 июня 2013

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

Marshal.ReleaseComObject(Image1);

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

...