Разверните C # ActiveX в CAB для использования Internet Explorer - PullRequest
13 голосов
/ 30 марта 2011

Я отчаянно пытаюсь развернуть ActiveX для IE, разработанный на C #, в виде CAB-архива.Я прочитал много ресурсов (некоторые из них от StackOverflow), и многие люди сталкиваются с такими же проблемами.Я испробовал 3 решения: а) создание проекта CAB VS, б) создание CAB вручную с использованием CABARC с регистрацией COM в INF и c) создание CAB вручную с запуском msiexec.Никто из них не работал.Я даже пытался d) создать загрузчик, который запускает msiexec безрезультатно (потому что некоторые люди предложили просто запустить msiexec в Vista, не может работать).

Я использую Windows Vista, но мой проект не удаетсязапускать даже на IE6 на XP.

Когда я устанавливаю ActiveX с помощью MSI, все ВСЕ под Windows.Очевидно, что CAB не работает, и я не смог найти правильный способ отладки всего этого процесса.

Любая помощь приветствуется.

1 Ответ

29 голосов
/ 30 марта 2011

Обновление: обратите внимание, что этот старый, но превосходный ответ все еще является очень хорошим планом того, как подходить к решению этой проблемы, по крайней мере, в том же эволюционном масштабе, как Win7 и IE11.Мне просто удалось заставить все это работать, используя набор инструментов Отвечающего Firebreath.org как отправную точку.Это не просто, но это может быть сделано.Я добавил ссылку на этот проект в список ссылок ниже, поскольку он может стать более логичной отправной точкой для текущих разработчиков, чем этот обзор.

Ура - я только что закончил идентичный проект, так что вам будет приятно узнать, что это действительно возможно.Я проверял это только на XP - я понимаю, что могут быть проблемы, когда Vista / 7 не позволяет вызывать msiexec.

Учитывая, что у вас есть сборка, правильно отображающая интерфейс COM, я сделалследующее:

  • Сборка со строгим именем.
  • Создание файла INF
  • Создание MSI с использованием шаблона «Проект установки» в Visual Studio 2008.
  • Создание CAB-файла с помощью «iexpress.exe» в комплекте с Windows XP.

Создание INF-файла

Использованный мною файл * .inf выглядит так:

[version]
signature="$CHICAGO$"
AdvancedINF=2.0

[Setup Hooks]
install=install

[install]
run=msiexec.exe /package """%EXTRACT_DIR%\SampInst.msi""" /qn

Единственный бит, который вам нужно изменить, это SampInst.msi.Примечание. Я бы использовал имя файла 8.3, так как длинные имена могут вызывать проблемы.Во время тестирования я бы также не использовал переключатель qn, так как это установка без вывода сообщений.

Создание установщика

Установщик должен сделать только одну вещь, а именно зарегистрировать сборку с помощьювызывая РегАсм на это.Большинство инсталляторов предоставят какой-то метод, чтобы легко это сделать.Например, установщик, созданный в VS 2008, просто должен иметь свойство «Register» сборки, установленное в «vsdrpCOM».Обратите внимание, что vsdrpCOM должен быть выбран, поскольку он генерирует соответствующие записи реестра во время сборки.Параметр vsdrpCOMSelfRegistration, скорее всего, потерпит неудачу, так как он вызывает RegAsm во время выполнения и, следовательно, не будет работать для не администраторов.

Упакуйте установщик в CAB-файл

Это может быть сделано любым архиватором cab.Windows XP содержит iexpress.exe, архиватор, управляемый мастером, в то время как Microsoft CAB SDK содержит cabarc.exe.Другие сторонние инструменты также доступны.Обратите внимание, что вам нужно зарезервировать место в CAB-файле для подписи кода, если вы собираетесь подписать CAB.

Вам потребуется CAB-файл INF и MSI-файл.Вам не нужно будет CAB-файл файла Setup.Exe.

Полезный совет: Тип проекта проекта установки VS2008 позволяет задать шаг после сборки в свойствах, поэтому вы можете создать и CAB-файл за один шаг.,Мой шаг после сборки выглядит следующим образом:

cd "$(ProjectDir)"
"%WINDIR%\System32\Makecab.exe" /f "VboCslib.ddf"

Формат файла DDF задокументирован .

Пример HTML-страницы

Используется тег объектауказать на файл cab, содержащий установщик.Очень простая HTML-страница, на которой будет развернут ActiveXControl, будет выглядеть так:

<html>
<head></head>
<body>

    <!--
        ID :    The id of the ActiveX control to be used in JavaScript.
        CLASSID : The GUID associated with the ActiveX control.
        CODEBASE: The location containing the CAB installer for the ActiveX 
       control. This could be a URL, or a relative path.
        -->
    <OBJECT ID="MyActiveXControl"
            CLASSID="CLSID:FC36FAE1-48E0-4f6b-B469-E1B5A8C6D1AC"
            CODEBASE="cabfiles\SampleCabFile.CAB#version=1,0,0,0">
        </OBJECT>

        <script>
            MyActiveXControl.SomeMethod();
        </script>
    </body>
    </html>

Полезные советы

  • Убедитесь, что ваш установщик устанавливается на основе «для пользователя», а не «на-машина "ОсноваЭто повысит вероятность установки, если у пользователя нет прав администратора.

Устранение неисправностей

Internet Explorer 6 действительно предоставляет действительно полезную диагностическую помощь.Очистите ваши временные файлы Интернета, затем перейдите на веб-страницу.Если установка не работает, перейдите к временным файлам Интернета, и вы увидите там несколько файлов.Одним из них будет запуск журнала ошибок - CodeDownloadErrorLog.Перетащите его на рабочий стол и откройте в блокноте, и он предоставит подробную информацию о том, что он пытался сделать в случае сбоя.

Ссылки

  1. Microsoft KB247257 - Шаги для подписи CAB-файла
  2. MSDN - Об архитектуре файлов INF
  3. SN.EXE - Сильные программы с сильными именами
  4. Nikolkos Craft - Как: развернуть элемент управления .NET ActiveX
  5. КодProject - пошаговое создание ActiveX .NET
  6. CodeProject - загрузка компонентов C # ActiveX через CAB-файл
  7. MSDN - свойство ALLUSERS (Windows)
  8. MSDN - элементы управления ActiveX без прав администратора
  9. MSDN - формат Microsoft Cabinet

Обновление: Firebreath.org имеет набор инструментов для создания плагинов для браузеров для многих платформ.Код IE / ActiveX для решения поставленной здесь проблемы является лишь подмножеством.Но с 6 ноября 2014 года мне было легче начать с Firebreath и его инструкций, чем пытаться создать свою среду разработки и развернуть все свои собственные решения с нуля.

...