.: NSIS - все вопросы :. часть 2.

Ответить
 • Просмотры: 32
Аватара пользователя
kotkovets

Re: .: NSIS - все вопросы :. часть 2.

Сообщение kotkovets »

Цитата Dodakaedr:



K.A.V., Регистрация dll провожу через команду RegDLL, а дерегистрацию как сделать? Есть противоположная команда? В справке не нашел.
.: NSIS - все вопросы :. часть 2.




Кстати, RegDLL/UnRegDLL не работают в x64-системах, для корректной регистрации библиотеки в x64-системе, нужно вызывать regsvr32, все об этом знают?

Это было выявлено уже не помню как, либо здесь кто-то об этом говорил, либо мне кто-то репорт кидал, когда создаваемые SFX архивы через мой креатор не регистрировали dll, либо я сам это обнаружил Изображение

Возможно, этот баг уже исправили и всё наладили в новой сборке NSIS, пока не было времени тестировать (а может, моя личная dll написана криво, на которой тестил Изображение)

В любом случае, проверьте, регистрирует ли новая сборка NSIS библиотеки через эти команды, а если нет - пользуйтесь логической конструкцией, например, я буду пользоваться в своём SFX Creator таким кодом для регистрации библиотек:



Сохраняем в переменную $IsWow64Process тип системы (если значение 1 = 64 бита)



Код:

Код: Выделить всё

Function .onInit
Var /Global IsWow64Process
  System::Call kernel32::GetCurrentProcess()i.s
  System::Call kernel32::IsWow64Process(is,*i.s)
  Pop $IsWow64Process
FunctionEnd

Для регистрации использовать так



Код:

Код: Выделить всё

${If} $IsWow64Process == "1"
   ExecWait 'regsvr32 /s "$TEMP\MyDll.dll"'
${Else}
   RegDLL "$TEMP\MyDll.dll"
${EndIf}

Для отмены регистрации использовать так



Код:

Код: Выделить всё

${If} $IsWow64Process == "1"
   ExecWait 'regsvr32 /u /s "$TEMP\MyDll.dll"'
${Else}
   UnRegDLL "$TEMP\MyDll.dll"
${EndIf}



Можно загнать всё в макросы для более удобного использования:



Скрытый текст

[spoiler]В начале кода:



Код:
[/spoiler]

Код: Выделить всё

!define MyRegDLL "!insertmacro MyRegDLL"
!macro MyRegDLL _FILE_
${If} $IsWow64Process == "1"
   ExecWait 'regsvr32 /s "${_FILE_}"'
${Else}
   RegDLL "${_FILE_}"
${EndIf} 
!macroend     
!define MyUnRegDLL "!insertmacro MyUnRegDLL"
!macro MyUnRegDLL _FILE_
${If} $IsWow64Process == "1"
   ExecWait 'regsvr32 /u /s "${_FILE_}"'
${Else}
   UnRegDLL "${_FILE_}"
${EndIf} 
!macroend

Не забудьте получить тип системы:



Код:

Код: Выделить всё

Function .onInit
Var /Global IsWow64Process
  System::Call kernel32::GetCurrentProcess()i.s
  System::Call kernel32::IsWow64Process(is,*i.s)
  Pop $IsWow64Process
FunctionEnd

Для регистрации использовать так



Код:

Код: Выделить всё

${MyRegDLL} "$TEMP\MyDll.dll"

Для отмены регистрации использовать так



Код:

Код: Выделить всё

${MyUnRegDLL} "$TEMP\MyDll.dll"

Не тестировал, но вроде всё правильно написал
Аватара пользователя
Dodakaedr

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Dodakaedr »

Хотел уже писать что не нашел там нужного, а потом решил еще раз посмотреть по внимательней и увидел))
Цитата:



time - указанное время в миллисекундах, если указать константу ${INFINITE} или -1

установщик будет ждать завершения процесса.



Спасибо!
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Всем привет.

Есть задача, скорей всего нерешаемая, но всё-таки спрошу, может и есть какие-то варианты...



В общем веду неравный бой с торрентами. Дело в том, что мою программу выкладывают там, и авторы раздач зачастую сами не понимают какие версии грузят, т.к программа постоянно обновляется. Так вот хочу спросить, как прикрыть или ограничить подобную лавочку? Чтобы программу качали с официального сайта, а не с торрентов. Быть может реализовать одноразовые ключи и выдавать их только тем, кто загрузил программу с официального сайта. Но я не знаю как отладить такую схему... Есть ли у вас мнение насчёт этого вопроса?

Спасибо!
Аватара пользователя
tony1990

Re: .: NSIS - все вопросы :. часть 2.

Сообщение tony1990 »

Цитата Serg866:



Дело в том, что мою программу выкладывают там, и авторы раздач зачастую сами не понимают какие версии грузят, т.к программа постоянно обновляется. Так вот хочу спросить, как прикрыть или ограничить подобную лавочку?
.: NSIS - все вопросы :. часть 2.




Причем здесь NSIS, т.е. пакет инсталлятора? Ваша программа полностью на NSIS написана? Что помешает пользователю скопировать ключ с официального сайта и вставить в описание раздачи?

Запихните в главный файл проверку контрольных сумм файлов программы, чтобы все компоненты были нужной версии, если написана программа не на NSIS - сделайте эту проверку в отдельном потоке, чтобы сделать проверку незаметной для пользователя
Аватара пользователя
kotkovets

Re: .: NSIS - все вопросы :. часть 2.

Сообщение kotkovets »

Адаптировал
WinVer2.nsh
под Windows 10.

Добавлены значения: Определение названия ОС:

Win10

Server 2015 (пока так)

Определение редакции ОС:

Windows 10 N

Windows 10 China

Home Single Language

Home
---

На серверных ОС не тестировал, просьба потестировать.
Аватара пользователя
tony1990

Re: .: NSIS - все вопросы :. часть 2.

Сообщение tony1990 »

Цитата Kopejkin:



как нужно записать, чтобы папка с файлами устанавливалась на общем Рабочем столе, а не на пользовательском?
.: NSIS - все вопросы :. часть 2.






Код:

Код: Выделить всё

Function .onInit
 SetShellVarContext all
 StrCpy $INSTDIR "$DESKTOP\Моя программа"
FunctionEnd
Аватара пользователя
tony1990

Re: .: NSIS - все вопросы :. часть 2.

Сообщение tony1990 »

Цитата K.A.V.:



Function .onInit
.: NSIS - все вопросы :. часть 2.




Шайтан, однако Изображение Спасибо!
Аватара пользователя
kotkovets

Re: .: NSIS - все вопросы :. часть 2.

Сообщение kotkovets »

K.A.V.

Здравствуйте.

Подскажите, пожалуйста, как на созданной странице сделать кликабельную ссылку (без всяких плагинов типа Linker).

Ну чтобы адрес сайта преобразовывался в кликабельный.

PS: страницу создал на NSIS Dialogs

---------------
Аватара пользователя
Dodakaedr

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Dodakaedr »

Цитата Serg866:



как на созданной странице сделать кликабельную ссылку (без всяких плагинов типа Linker).
.: NSIS - все вопросы :. часть 2.




Клик на Label-адресе. Открытие ссылки через Shell
Ответить

Вернуться в «Автоматическая установка приложений»