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 + путь и имя dll

ret = LaunchApplication(strcmd, strcmdopt, Windir, sw_normal, Infinite, LAAW_OPTION_WAIT | LAAW_OPTION_SHELLEXECUTE)

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

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


person girish    schedule 28.02.2018    source источник
comment
Расплывчато без приличного сообщения об ошибке. Начните делать так, как это должно быть сделано, красный круг.   -  person Hans Passant    schedule 28.02.2018
comment
installshield 2016 не отображает сообщение об ошибке   -  person girish    schedule 02.03.2018


Ответы (2)


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

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

person izm    schedule 01.03.2018

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

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

person Christopher Painter    schedule 01.03.2018