Как решить «катастрофический сбой» с 32-битным компонентом COM в SysWOW64 \ cscript или wscript - PullRequest
3 голосов
/ 09 марта 2010

Я пытаюсь запустить сценарий VBScript, который использует 7-летний сторонний 32-разрядный COM-компонент в Windows Server 2008 R2 с узлом 32-разрядных сценариев командной строки SysWOW64 \ cscript.exe. Когда я вызываю CreateObject для класса, он кажется успешным, но в первый раз, когда я пытаюсь использовать свойство или метод (я пробовал несколько разных) для объекта, он дает мне «катастрофический сбой». У меня есть идентичные результаты с SysWOW64 \ wscript.exe, за исключением того, что, конечно, мое сообщение об ошибке появляется в окне msgbox вместо окна командной строки.

Я думаю, что это связано именно с 64-битными хостами сценариев из-за следующего:

  1. Эквивалентный классический ASP-сценарий, вызывающий тот же компонент и использующий 95% того же кода, корректно работает на том же сервере, а IIS настроен на поддержку 32-разрядного COM.
  2. Один и тот же VBScript корректно работает на 32-разрядной машине с Windows XP и 32-разрядной машине с Windows Server 2003.
  3. Компонент дает сбой точно так же на моем 64-битном компьютере с Windows 7.

Мой поиск в Google для решения этой проблемы в основном выявил множество различных проблем, которые были решены путем помещения компонента COM на панель инструментов в Visual Studio. Очевидно, что это решение здесь не применимо.

Мои вопросы:

  1. Существует ли основная проблема, которая всегда стоит за «катастрофическим отказом» хоста сценариев Windows, вызывающего компонент COM?
  2. Есть ли место в оснастке конфигурации или в реестре, где мне нужно внести изменение, аналогичное изменению, которое я должен был внести в пул приложений IIS, на «Включение 32-разрядных приложений»?
  3. Есть ли общее место в средстве просмотра событий Server 2008 R2, на которое я должен обратить внимание, чтобы узнать, есть ли какие-либо дополнительные сведения о сбое, если он окажется специфичным для этого компонента?

Заранее спасибо.

1 Ответ

3 голосов
/ 09 марта 2010

Не читайте ничего в тексте ошибки. «Катастрофический отказ» должен быть самым худшим из названных кодов HRESULT. Программист использовал код ошибки E_UNEXPECTED, это часто встречается в программировании COM. Обычно это означает «я не могу сделать эту работу, но я не знаю почему». Что, конечно, не оставляет вам много вариантов, чтобы выяснить, почему.

Вряд ли это напрямую связано с работой в 64-битной версии Windows. Вы используете 32-битные хосты сценариев, они отлично справляются с обеспечением 32-битной среды выполнения для COM-серверов. Гораздо более вероятно, что с установкой просто что-то не так, какой-то недостающий компонент. Единственный хороший способ разобраться в этом - обратиться к автору или поставщику COM-сервера за поддержкой. Если это нецелесообразно, попробуйте запустить это на виртуальном ПК, который загружает более раннюю версию Windows.

...