Невозможно прочитать реквизиты документа Office 2007 с помощью dsofile.dll x86 в системе x64.
-
20-09-2019 - |
Вопрос
У нас есть 32-разрядное приложение .NET, которое использует 32-разрядную версию DSOFile.dll 2.1 для чтения общих свойств из документов Office.Это работает в 32-разрядных версиях Windows как для документов Office 2003, так и для документов Office 2007.Сейчас мы изучаем поведение нашего приложения в 64-битной среде, в частности в 64-битной Windows Server 2008.
В этой 64-битной среде DSOFile.dll может успешно читать свойства документов Office 2003 (например.DOC), но в случае документов Office 2007 (например.DOCX), для всех свойств возвращаются только пустые строки, иначе генерируется ошибка.
Вот мои наблюдения:
Среда:чистая установка
Прочтите реквизиты DOC:ХОРОШО
Прочтите реквизиты DOCX:Возвращены пустые значения
Среда:Пакет обеспечения совместимости Office 2007 установлен.
Прочтите реквизиты DOC:ХОРОШО
Прочтите реквизиты DOCX:Возвращены пустые значения
Среда:Пакет обеспечения совместимости Office 2007 SP1
Прочтите реквизиты DOC:ХОРОШО
Прочтите реквизиты DOCX:Возвращены пустые значения
Среда:Офис 2007 установлен
Прочтите реквизиты DOC:ХОРОШО
Прочтите реквизиты DOCX:Сообщение об ошибке = «Документ не является файлом OLE»
В 64-битной системе я использовал копию regsvr32, расположенную в %SystemRoot%\Syswow64, для регистрации dsofile.dll.
Любой совет будет принят с благодарностью.
Решение
Вы можете скомпилировать свое приложение на x86 вместо AnyCPU, тогда оно будет нормально работать на x64 Windows.
Другой возможный способ — использовать Open XML SDK 2.0 для Microsoft Office.Посмотрите, поддерживает ли он приложения x64.
Другие советы
Вы можете найти исходный код DSOFIle (посмотрите в Google) и скомпилировать его для 64-битной версии или попробовать эту ссылку, по словам кого-то, они уже это сделали:http://www.keysolutions.com/blogs/kenyee.nsf/d6plinks/KKYE-79KRU6
У меня также есть версия для x64, если она вам нужна, я могу ее загрузить.
Возможно, это не имеет прямого отношения к вашей проблеме, но если вы хотите попробовать, я использовал x86 и x64.