RegAsm.exe не может зарегистрировать Dll через installshield 2016

У нас есть installshield 2016, и внутри него мы запускаем установочный скрипт. Этот скрипт вызывается через пользовательское действие.

Итак, мы написали следующую команду, чтобы зарегистрировать "mydll.dll", как указано ниже: C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /codebase mydll.dll Приведенная выше команда прекрасно работает при запуске вручную. через командную строку с административным доступом. Но происходит сбой через установщик, созданный с помощью настраиваемого действия сценария installshield.

Для запуска команды мы используем функции LaunchApplicationAndWait() и LaunchApplication(): strcmd = "путь к cmd.exe" + "cmd.exe" strcmdopt = "путь к regasm.exe" + "regasm.exe " + /codebase + path и имя dll

ret = LaunchApplication (strcmd, strcmdopt, windir, sw_normal, бесконечный, LAAW_OPTION_WAIT | LAAW_OPTION_SHELLEXECUTE)

аналогично ret = LaunchApplicationAndWait(strcmd,strcmdopt,LAAW_OPTION_WAIT | LAAW_OPTION_HIDDEN)

Мой вопрос, почему обе команды не работают при запуске через скрипты настраиваемых действий installshield

2 ответа

Распространяется ли dll с установкой? если да, присутствует ли файл в каталоге установки (или где-либо еще) при вызове сценария? Возможно, добавьте поле msg для отладки, чтобы увидеть, выполняется ли это условие.

Я использую отложенное пользовательское действие, чтобы зарегистрировать.dll через regasm, и он работает просто отлично.

Вы не должны вызывать Regasm во время установки. Вы должны поместить DLL в качестве ключевого файла в его собственный компонент и установить атрибут COM Interop = True. Это заставит InstallShield выполнить regasm /regfile во время сборки и получить выходные данные и динамически записать их в таблицу Registry. Во время установки MSI просто скопирует файл и применит записи реестра, и все готово.

Примечание. В соответствии с MSDN пользовательские функции doco не вызываются во время regasm /regfile, поэтому, если вы делаете какую-либо странную саморегистрацию внутри своего класса, вам необходимо вписать это в программу установки.

Другие вопросы по тегам