Не можете зарегистрировать мою 64-битную dll через скрипт nsis?

У меня есть 64-битная dll, которую я могу зарегистрировать из командной строки с помощью regsvr32. Но проблема в том, что когда я пытаюсь зарегистрировать свою dll через скрипт nsis, она не регистрируется. Я использовал команду RegDLL в скрипте nsis. Кто-нибудь знает, в чем может быть проблема?


person surendran    schedule 01.10.2011    source источник
comment
Проблема почти наверняка в том, что 32-битный процесс пытается загрузить вашу 64-битную DLL. Но я понятия не имею, как это исправить.   -  person Gabe    schedule 01.10.2011
comment
@Gabe, запускающий внешний regsrv32, определенно является одним из вариантов;)   -  person Eugene Mayevski 'Callback    schedule 01.10.2011
comment
32-битный процесс @Gabe означает установщик. если да, то как мне сделать 64-битный установщик nsis?   -  person surendran    schedule 01.10.2011
comment
@Eugene: Должен сказать, что понятия не имею, как это исправить в NSIS.   -  person Gabe    schedule 01.10.2011


Ответы (3)


вместо этого вы можете использовать rundll32.exe:

ExecWait '"$SYSDIR\rundll32.exe" $INSTDIR\mydll.dll DllRegisterServer'

rundll32.exe достаточно умен, чтобы запустить 64-битную версию самого себя, если вы запустите его с 64-битной dll.

person Bevan Collins    schedule 20.10.2011
comment
Я думаю, что лучше было бы использовать regsvr32, это программа, которую MS предоставляет для регистрации ActiveX DLL, а также обнаруживает 32- или 64-битные DLL (просто используйте параметр / s, чтобы пропустить сообщения). Блогер MS Раймонд Чен не рекомендует использовать rundll32, см. блоги. msdn.com/b/oldnewthing/archive/2013/01/04/10382242.aspx - person Alberto Martinez; 31.01.2014
comment
@Bevan Collins Спасибо, вы спасли мне день! Оказалось, что ваш подход - единственный способ зарегистрировать 64-битную DLL из 32-битного установщика. - person denim; 26.05.2014

Известно, что RegDLL проблематична во всех случаях, кроме простейших. Google site:forums.winamp.com nsis за примерами.

Чтобы убедиться, что регистрация вашей DLL, библиотеки типов, BHO и т. Д. Прошла успешно, вы должны использовать InstallLib. Он предоставляет возможность установки библиотеки x64 (плюс многое другое!)

См. http://nsis.sourceforge.net/Docs/AppendixB.html#B.1 для получения дополнительных сведений об установке библиотеки с помощью NSIS.

person Ryan Schipper    schedule 01.10.2011

ExitWait не найден сценарий NSIS. ExitWait вместо ExecWait.

вы часто используете:

ExecWait '"$ SYSDIR \ rundll32.exe" $ INSTDIR \ mydll.dll DllRegisterSe

person panicstyle    schedule 23.10.2012