2014-11-04 118 views
1

我使用下面的代碼來掃描文檔:驅動程序,收到COMException錯誤

Dim manager = New DeviceManager 
Dim deviceinfo = manager.DeviceInfos.Cast(Of DeviceInfo)().FirstOrDefault(Function(di) di.Properties("Name").Value = deviceName) 
If deviceinfo Is Nothing Then Exit Sub 
Dim device As Device = deviceinfo.Connect 

Dim dlg = New CommonDialog 

Dim Item As Item = device.Items(1) 
Item.Properties("Bits Per Pixel").Value = 1 
Item.Properties("Horizontal Resolution").Value = 200 
Item.Properties("Vertical Resolution").Value = 200 

Dim img As ImageFile = dlg.ShowTransfer(Item, FormatID.wiaFormatTIFF, False) 

在最後一行,我收到2個不同的錯誤代碼。有時我得到0x8021000E,根據this頁面,意味着一個WIA_ERROR_EXCEPTION_IN_DRIVER錯誤。

有時候我收到COMException的遠程過程調用失敗0x800706BE

this頁,驅動程序錯誤默認情況下記錄到%windir%\wiadebug.log,但我沒有找到任何日誌文件存在。我確實在%windir%\debug\wiatrace.log找到了一個似乎包含這些信息的文件。但它並沒有給我任何比實際的錯誤更多的東西。

該程序在Windows 7 Professional 64位上運行。 WIA服務正在運行。

我可以採取哪些措施來解決此問題?

+1

確保你運行這個線程是一個STA線程,你在WPF或Winforms應用程序中獲得的類型。除此之外,從設備製造商獲得驅動程序更新是您唯一的希望避免這種情況。 – 2014-11-04 14:57:14

+0

另外,請檢查參數並確保(1)所有參數對您的設備有效,並且(2)您不必初始化任何您不是的設備。有些設備不遵守規則。 – xpda 2014-11-04 19:42:22

+0

@HansPassant我最初用Task.Run分離出一個任務。現在我同步運行它,我始終得到COMException。 – 2014-11-07 09:28:04

回答

0

1)我有一個WIA DLL的引用,就好像它不是一個系統COM DLL,而是一個外部DLL。更改這解決了COM異常。

2)WIA驅動程序異常顯然是因爲我明確將分辨率值設置爲200.沒有這一點,掃描進行得很好。

this page上,建議將DPI設置爲150或300或更高,並且某些掃描儀在DPI小於300時出現問題。(我會在檢查完此更新後回答此問題。)