У меня есть код, над которым я работаю, который работал нормально, пока я не установил Обновление программного обеспечения для веб-папок (KB907306) в Vista SP1. Я использую ADO с поставщиком MSDAIPP.DSO для доступа к серверам WebDAV и FPSE / WEC.
Тот же код отлично работает при чистой установке XP SP3 и работал до этого обновления (но я еще раз проверю при чистой установке Vista).
Краткий тестовый пример (сценарий WSH с именем IPPTest.wsf):
<job>
<reference object="ADODB.Connection"/>
<object id="cnIPP" progId="ADODB.Connection"/>
<object id="rec" progId="ADODB.Record"/>
<object id="stm" progId="ADODB.Stream"/>
<script language="VBScript">
Option Explicit
Const WEBROOT = "https://your.DAC-or-WEC.server"
Const USER = "youruser"
Const PW = "yourpw"
Const TEXTFILE = "yourtextfile.txt"
cnIPP.Open "Provider=MSDAIPP.DSO;Prompt=NoPrompt;" _
& "Connect Timeout=10;" _
& "Data Source=" & WEBROOT, _
USER, PW, adConnectUnspecified
rec.Open TEXTFILE, cnIPP, adModeRead
stm.Open rec, , adOpenStreamFromRecord
stm.Type = adTypeText
stm.Charset = "ascii"
MsgBox stm.ReadText(adReadLine)
stm.Close
rec.Close
cnIPP.Close
</script>
</job>
Когда это не удается, я получаю исключение:
---------------------------
Windows Script Host
---------------------------
Script: C:\Users\xxxxx\Desktop\IPPTest.wsf
Line: 19
Char: 8
Error: No such interface supported
Code: 80004002
Source: (null)
Что еще хуже, я даже не могу зайти так далеко, когда запускаю тот же сценарий на Win7 Beta (я еще не установил RC). В моей бета-версии Win7 вообще нет MSDAIPP.DLL.
Я также тестировал забавный образец Образец клиента веб-папки Microsoft Office (для MSDAIPP), написанный на VC ++ 6.0 только для того, чтобы удалить ADO с картинки. Предварительно скомпилированный EXE будет запускаться и работать (до некоторой степени) на моем испорченном Vista SP1 и на чистом XP SP3, но никак не на чистой Windows 7 Beta (ошибка «не удается создать MSDAIPP.DSO»). Я говорю «в некоторой степени», потому что по какой-то странной причине демонстрационное приложение Microsoft отображает пустые имена файлов и папок, хотя оно может загружать / скачивать файлы и перемещаться по каталогам.
Похоже, ADO ищет интерфейс, который MSDAIPP.DSO больше не предоставляет.
"Сломанный" MSDAIPP.DLL имеет версию 12.0.4518.1014 и, как и следовало ожидать, находится в C:\Program Files\Common Files\System\Ole DB
. На этой машине с Vista SP1 также установлен Office 2003 (и делал это до «обновления»).
Итак (наконец) у меня есть три вопроса:
- Есть ли способ вернуть это "Обновление ПО"? Он устанавливает больше, чем просто MSDAIPP.DLL, и, как заявляет Microsoft, для этого «исправления» не требуется удаления.
- Есть ли обходной путь или последующее исправление, которое исправляет исправление?
- Что за история с MSDAIPP и Win7? Он присутствует в Win7RC1? Или пользователям потребуется установить Office, чтобы получить его (ранее он был частью Windows, начиная с Windows 2000)?
Дополнительная информация!
После долгих поисков я нашел следующее:
Webdav на Устранение неполадок IIS 6.0
Примечание. Клиент Web Extender (кодовое имя Rosebud) не поставляется с Windows Vista, а функциональность WebDAV в Vista ограничена возможностями службы веб-клиента (перенаправитель WebDAV).
Приложения, написанные для использования Rosebud и ранее без проблем работавшие на компьютерах с Windows XP, могут не работать в Windows Vista.
Дополнительные функции WebDAV клиента Web Extender Client ранее были представлены в Windows 2000 и Windows XP как компонент веб-папок, MSDAIPP, и доступ к ним в Windows 2000 через проводник Windows и в Windows XP через мастер добавления сетевого окружения. Веб-папки не были включены в Windows Vista, но компонент веб-папок по-прежнему доступен как часть установки Microsoft Office. Установка Office 2007 на клиенте Windows Vista, в котором произошел сбой подключения, зависящий от клиента Web Extender, решает проблему.
На данный момент я подозреваю, что, установив Office 2003, я добавил в Vista то, что раньше было фундаментальной возможностью Windows. Последующая установка обновления программного обеспечения (ориентированного на Office 2007, хотя было заявлено, что оно не причиняет вреда предыдущим установкам Office) нарушила функциональность. Я не припомню, чтобы это было в каких-либо примечаниях к выпуску Vista.
Даже если обновление можно заставить работать, это будет огромной головной болью для любых программ, которые ожидают, что работающий MSDAIPP будет присутствовать в Vista или Windows 7.
Похоже, что Microsoft просто сломала еще одну спицу от колеса VB6 этим, сломав MDAC / DAC. Это может быть преждевременная оценка, и я жду любых других предложений или информации.
Интересно, как еще Microsoft ожидает от нас обеспечения программного доступа через WebDAV и FPSE / WEC? Есть ли новый API, о котором мы должны знать вместо использования ADO с MSDAIPP (он же Rosebud)?