Странная проблема в VB6 в генерации исполняемого файла - PullRequest
1 голос
/ 23 февраля 2011

Я там

У меня есть такой сценарий:

a) Блокнот: Windows Server 2008 R1, Visual Basic 6 со всем пакетом обновления.

b) Рабочий стол: Windows Server 2008 R1 (последнее обновление до sp1, я не знаю, виновен ли он), Visual Basic 6 со всем пакетом обновления.

c) Клиентский компьютер (Windows XP)

Я создал исполняемый файл в a) и установил его в c) .Он использует ADO (msado15.dll) и отлично работает в a) и C)

Затем, используя тот же код, я попытался сделать то же самоев b) (компиляция в b) ) и работает в b) , но не работает в c) .Я проверил, что это тот же код в a) и в b)

В резюме:

A

  • executetable_compiled_in_a.exe РАБОТЫ
  • executetable_compiled_in_b.exe РАБОТЫ

B машина

  • executetable_compiled_in_a.exe РАБОТЫ
  • executetable_compiled_in_b.exeРАБОТАЕТ

C машина (клиентский компьютер)

  • executetable_compiled_in_a.exe РАБОТАЕТ
  • executetable_compiled_in_b.exe СБОЙ!

Theсообщение об ошибке

Класс не поддерживает автоматизацию или не поддерживает ожидаемый интерфейс

и запускается по линии

Set Data = New ADODB.Connection

Итак, яне понимаю, в чем проблема, оба используют одну и ту же ссылку, но b) сгенерировал другой исполняемый файл.

ps: MSDAC_TYP НЕ РАБОТАЕТ В XP, и это не проблемаMSDAC, потому что исполняемый файл, сгенерированный в a), работает в c).

ps2: я также попытался использовать msado27.tlbи msado28.tlb с теми же результатами.

ps3: машины моего разработчика (a) и b)) - 64 бита, а клиентский компьютер - 32 бита.

Спасибо.

Обновление

Последняя служба Windows Server 2008 R1 (и я думаю, что то же самое для Windows 7) обновляет версию ADO и исполняемые файлы.Короче говоря, последний пакет обновления 1 (SP1) является злым и принесет много неприятностей, по крайней мере для ADO и машин для разработки.

msado15.dll без пакета обновления 6.1.7600

msado15.dll с сервисомпакет 6.1. 7601

Ответы [ 3 ]

0 голосов
/ 04 марта 2011

Установите kb983246 на компьютеры вашего клиента. Другой обходной путь - использовать библиотеку старых типов ADO, но она имеет проблему, описанную в kb983246, на 64-битных машинах.

0 голосов
/ 31 марта 2011

Скопируйте файл masado28.tlb с компьютера, предшествующего SP1, на компьютере разработчика с пакетом обновления 1 (SP1) в какую-либо папку (например, в% CommonProgramFiles% \ System \ ado \ PRESP1). Откройте regedit с правами администратора, найдите все значения msado28.tlb и замените все значения "% CommonProgramFiles% \ System \ ado \ msado28.tlb" на "% CommonProgramFiles% \ System \ ado \ PRESP1 \ msado28.tlb". Перед изменением установите Разрешения «Полный доступ» для Администраторов на ключи. В ссылках VB Project используйте «Microsoft ActiveX DataObjects 2.8 Library», в папке «Местоположение» вы увидите C: \ Program Files (x86) \ Common Files \ System \ ado \ PRESP1 \ msado28.tlb. Теперь вы можете перекомпилировать приложение VB, и ваш исполняемый файл должен работать без ошибок на всех машинах.

0 голосов
/ 24 февраля 2011

Все библиотеки типов ссылаются на msado15.dll, которая сама содержит библиотеку типов для версии MDAC / WDAC, частью которой она является.Каждая из библиотек типов описывает свою версию интерфейса ADO.

Как правило, вы должны использовать самую новую версию, необходимую для вашего приложения, и не более новую.Это дает вам самую широкую совместимость.Для многих приложений это означает 2.5, хотя для более поздней поддержки SQL Server может потребоваться 2.7 или 2.8, и есть несколько вещей, которые вы можете сделать в 2.6, а не в 2.5.

Не просто слепо использовать новейшиедоступный интерфейс.

Однако на немногих машинах с XP в дикой природе не будет установлено 2.8.Вероятно, поэтому MDAC_TYP «не будет работать» для вас.

Я могу только догадываться, что кто-то испортил программный стек DAC на одном или обоих ваших серверах Server 2008.Вероятно, установив дерьмо с отключенным UAC, минуя WRP.Или еще хуже, используя встроенную учетную запись администратора машины.

В противном случае программа, скомпилированная с использованием msado15.dll (т. Е. ADO 6.x), не будет работать на компьютере с XPвсе.

Только тот факт, что вы работаете с Server 2008 в качестве настольной ОС, вызывает здесь сигналы тревоги.

...