Ошибка MSI - сбой настраиваемого действия regsvr32 - PullRequest
8 голосов
/ 11 января 2012

Brief

У меня есть установочный пакет (на основе MSI), который пытается зарегистрировать файл DLL для использования в качестве панели Windows Explorer (панель инструментов Internet Explorer).

Пользовательское действие определяется следующим образом:

[SystemFolder]\regsvr32.exe /s "pathtodllhere"

Ошибка

  • Настраиваемое действие regsvr32 не работает в 64-битной Windows XP.

Вывод из журнала MSI:

CustomAction SystemFolder_2 вернул фактический код ошибки 5. Ошибка 1722. Проблема с этим пакетом установщика Windows. Программа, запущенная как часть установки, завершилась не так, как ожидалось. Действие SystemFolder_2, расположение: C: \ Windows \ SysWOW64 \, команда: regsvr32.exe / s "C: \ Program Файлы (x86) \ Test Install \ test.dll "

MSI (10: F4): Продукт: Тестовая установка - Ошибка 1722. Существует проблема с этим пакетом установщика Windows. Программа запускается как часть установка не завершилась, как ожидалось. Действие SystemFolder_2, расположение: C: \ Windows \ SysWOW64 \, команда: regsvr32.exe / s "C: \ Program Files (x86) \ Test Install \ test.dll "

Краткое описание моих тестов / мыслей на данный момент:

  • Настраиваемое действие находится в разделе «InstallFinalize», поэтому оно запускается ТОЛЬКО после сброса файлов на жесткий диск.
  • Файл Dll не поврежден и действителен.
  • Настраиваемое действие Regsvr32 работает нормально (и установка MSI) на: 32-битной Windows 7 и 32-битной Windows XP.
  • 32-разрядная версия Regsvr32 выполняется во время 64-разрядной установки (как и должно быть).
  • Сбой Regsvr32 с кодом ошибки 5, т.е. ERROR_ACCESS_DENIED.

Решения и размышления

  1. Самостоятельная регистрация - не использовать regsvr32 и вручную разместить ключи реестра с помощью моего установщика MSI.
  2. dll - это DLL-библиотека Delphi COM, которая использует компонент TRegistry для регистрации. Опять же, я не могу придумать причину, по которой это не сработает, поскольку это всего лишь обертка, а просто мысль.

Надеюсь, я показал здесь свои исследования и не теряю никого времени!

1 Ответ

3 голосов
/ 11 января 2012

Лучшее практическое решение (как вы уже упоминали) состоит в том, чтобы извлечь записи реестра из компонента и записать их в реестр, используя msi.

Фон

Regsvr32 требует прав администратора и подтверждения повышенных привилегий для регистрации COM-компонентов в 64-битной Windows 7, но msiexec не знает, как запрашивать повышенные привилегии длядействие.

Это требование можно проверить с помощью команды «Открыть с помощью ...», чтобы запустить C: \ Windows \ SysWOW64 \ regsvr32.exe на компоненте (что не будет выполнено).Принимая во внимание, что если вы создадите пакетный файл для регистрации, а затем «Запуск от имени администратора», компонент будет успешно зарегистрирован.

...