Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
kotkovets
11-09-2015, 08:47
Как реализовать функцию sharedfile в nsis »
смотрите пример Library.nsi NSIS в папке Examples.
Dodakaedr
12-09-2015, 19:43
смотрите пример Library.nsi NSIS в папке Examples. »
Почему не находит файл, хоть он и присутствует?!include "Library.nsh"
outfile regtest.exe
!define TestDLL "$EXEDIR\w.dll"
section main
!insertmacro InstallLib REGDLL SHARED NOREBOOT_NOTPROTECTED "${TestDLL}" "${TestDLL}" "$EXEDIR"
sectionend
http://i65.fastpic.ru/big/2015/0912/b9/adddad77b709123e459b3fc4f76498b9.png
Доброго времени суток) Начал изучать NSIS и вот вроде все просто но не работает...
а именно:
!include "RegistryFunc.nsh"
!include 'LogicLib.nsh'
${If} ${KeyExists} "HKEY_CURRENT_USER\SOFTWARE\7-Zip"
MessageBox MB_OK "Ключ есть!"
${Else}
MessageBox MB_OK "Ключа не существует!"
${EndIf}
Всегда срабатывает else несмотря на наличие ключа
Дико извиняюсь - невнимательность)))
библиотека полностью совместима только ANSI версией компилятора NSIS.
Заметил косяк или особенность:
Есть ветка HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Skype
Такой нету HKEY_LOCAL_MACHINE\SOFTWARE\Skype
делаем ${If} ${KeyExists} "HKEY_LOCAL_MACHINE\SOFTWARE\Skype" пишет что есть
удаляем HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Skype
делаем ${If} ${KeyExists} "HKEY_LOCAL_MACHINE\SOFTWARE\Skype" пишет что нету
Отсюда получается сквозной поиск в раздел Wow6432Node
Вроде бы ничего...но если сделать ${SaveKeyANSI} "$EXEDIR\HKLM_skype.reg" "HKEY_LOCAL_MACHINE\SOFTWARE\skype"
то получим данные из HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Skype но путь будет в HKEY_LOCAL_MACHINE\SOFTWARE\Skype
тоесть применив мы получим новый ключ HKEY_LOCAL_MACHINE\SOFTWARE\Skype
Это нормально?Особенность API или косяк? Как проверить наличие используя RegistryFunc.nsh без сквозного поиска в Wow6432Node?
потому что если сделать в cmd: reg query HKLM\Software\Skype то получим "Ошибка: Не удается найти указанный раздел или параметр в реестре."
Надеюсь разъяснил понятно)))
Dodakaedr
13-09-2015, 20:27
Как заставить работать переменные $EXEDIR, $SYSDIR ? Если так указать то работает, но это не вариант.!include "Library.nsh"
outfile regtest.exe
!define TestDLL "C:\Users\Admin\Documents\w.dll"
section main
!insertmacro InstallLib REGDLL SHARED NOREBOOT_NOTPROTECTED "${TestDLL}" "${TestDLL}" "$EXEDIR"
sectionend
Dodakaedr, они только так и работают...
!define SOME_CONSTANT "SomeApp"
${SOME_CONSTANT}
ну или переменные
Создание переменной вне секций и функций (в начале вашего кода)
Var MyVariableName
Создание переменной в секции или в функции
Var /Global MyVariableName
Пример:
Function .onInit
Var /Global MyVariableName
StrCpy $MyVariableName "Значение переменной"
FunctionEnd
Взято из справки
Dodakaedr
14-09-2015, 16:51
nfs911, так тоже не работает.
P.S. Все разобрался.
Уважаемые, как убить процесс в системе...Использовал ProcessFunc.nsh, - не справился( возвр.зн.-2) Процесс убивается Анвиром...
как убить процесс в системе »
http://nsis.sourceforge.net/KillProcDLL_plug-in
http://nsis.sourceforge.net/KillProc_plug-in
Если WinAPI, то TerminateProcess (https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms686714%28v=vs.85%29.aspx)
kotkovets
16-09-2015, 12:02
Использовал ProcessFunc.nsh, - не справился( возвр.зн.-2) »
процесс защищенный, требует особых привилегий., получите их и...всё.
K.A.V., kotkovets, спасибо... Вопрос я задал потому, что на ХР, как я понимаю, нет особых заморочек с правами. Работаю под Администратором и все процессы, запущенные мной, разве не имеют равные права? Обратило на себя внимание именно то , что Анвир справляется с задачей, а скомпилированный в NSIS ехе_шник нет... А на памяти время и версия Анвира, который, также, не справлялся с этим процессом. Поэтому мне и показалось (смягчаю), что дело не в правах а в самой убивалке, что и породило мой вопрос. Можно ли считать, что все способы предложенные Вами имеют равные возможности, которые определяются только правами процесса или можно утверждать, что один способ эффективнее другого, при всех равных прочих условиях? Прошу не судить строго, - раньше, как-то, не возникала необходимость разбираться в этом вопросе... Еще раз, спасибо.
Попутно хочу спросить, как убрать из трея иконку убитого процесса, которая остается после убиения?
Salmo,
Попробуй
; RtlAdjustPrivilege - Включает или выключает привилегию у вызывающего потока или процесса.
System::Call ntdll::RtlAdjustPrivilege(i20,i1,i0,*i)
потом уже убивай процесс
Только есть процессы , которым начхать на классические привелегии и права (к примеру, если "хозяин процесса" - TrustedInstaller... )
Попутно хочу спросить, как убрать из трея иконку убитого процесса, которая остается после убиения? »
!include "WinMessages.nsh"
StrCpy $1 0
FindWindow $0 "Shell_TrayWnd" ""
FindWindow $0 "TrayNotifyWnd" "" $0
FindWindow $0 "SysPager" "" $0
FindWindow $0 "ToolbarWindow32" "" $0
${While} $1 != 1920
SendMessage $0 ${WM_MOUSEMOVE} 0 $1
IntOp $1 $1 + 1
${EndWhile}
ZaxBoys66
19-09-2015, 15:22
NSIS is possible to play a stream url using bass.dll or other plugins?
I have some ideas for a customized program but I have lost a source of it can create.
Please help me.
ZaxBoys66,
!define BASS_LOC "$EXEDIR\bass.dll"
!define MP3 "$EXEDIR\demo.mp3"
!define BASS_SAMPLE_LOOP 4
OutFile "Bass_Test.exe"
Page instfiles
Section
FindWindow $0 "#32770" "" $HWNDPARENT
System::Call /NOUNLOAD '${BASS_LOC}::BASS_Init(i -1,i 44100,i 0,i r0,i n) b.r0'
System::Call /NOUNLOAD '${BASS_LOC}::BASS_Start() b.r0'
System::Call /NOUNLOAD '${BASS_LOC}::BASS_StreamCreateFile(b 0,t "${MP3}",i 0,i 0,i 0) i.r1'
System::Call /NOUNLOAD "${BASS_LOC}::BASS_ChannelFlags(i r1, i ${BASS_SAMPLE_LOOP}, i ${BASS_SAMPLE_LOOP}) i.R0"
System::Call /NOUNLOAD '${BASS_LOC}::BASS_ChannelPlay(i r1, b 0) i.R1'
SectionEnd
Function .onGUIEnd
System::Call /NOUNLOAD "${BASS_LOC}::BASS_StreamFree(i) v (r1)"
System::Call /NOUNLOAD "${BASS_LOC}::BASS_Stop() b () .r0"
FunctionEnd
Добрый день всем!
проблемка такая: при запуске инсталлятора собранного в NSIS на windows server 2008
вываливается сообщение от UAC(см.картинку)
почему ругань идет на непонятный Set...tmp? как это исправить
(если нажать дополнительно, то показывается путь к файлу инсталлятора)
http://forum.oszone.net/attachment.php?attachmentid=129305&stc=1&d=1442837123
как убрать сообщение - известно, вопрос как его сделать корректным
инсталлятор подписан цифровой подписью
ZaxBoys66,
Не все версии bass.dll нормально работают с NSIS ! Используй последние версии с http://www.un4seen.com/
(я тестировал 2.4.10 и 2.4.11 )
Что я делаю не так?
файл test_lib.nsh
!include "x64.nsh"
!include "Logiclib.nsh"
;!macro test_x
${If} ${RunningX64}
MessageBox MB_OK "running on x64"
!define test_def1 1000
${else}
MessageBox MB_OK "running on x32"
!define test_def1 2000
${EndIf}
;!macroend
;!insertmacro test_x
С макро и без - не работает
Цель: В nsh файле присвоить к test_def1 разные значения в зависимости от разрядности
--------------------------------------------------------
Решение:
Section
${If} ${RunningX64}
MessageBox MB_OK "running on x64"
StrCpy $1 "1000"
${else}
MessageBox MB_OK "running on x32"
StrCpy $1 "2000"
${EndIf}
!define test_def1 $1
MessageBox MB_OK ${test_def1}
SectionEnd
kotkovets
24-09-2015, 11:29
Что я делаю не так? »
!define - это команды компилятора(восклицательный знак впереди), а не установщика во время установки.
Добрый вечер, знатоки.
Столкнулся с необходимостью в деинсталляторе удалять только установленные инсталлером файлы, а не всю папку.
И, неожиданно, выяснил, что не кривого способа вроде как и нет...
Прочитал статью "Uninstall only installed files" на сайте разработчиков, попробовал и, понял, что нормально это не работает:
К примеру, у меня копируется большое число файлов командой типа
File /r "..\out\files"
А в приведённом рецепте в файл uninstall.log в этом случае пишется не каждый файл по отдельности, а только папка.
Да притом и папка не удаляется при деинсталляции.
Неужели нет простого и лёгкого способа решить указанную проблему?
Спасибо.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC