Показать полную графическую версию : [архив].: NSIS - все вопросы :.
Krinkels
25-11-2011, 11:19
А ведь куда проще и быстрее расположить визуально элементы и ещё при этом получить готовый код. »
Хе, а ты займись, сделай визуальный редактор. И будет счастье всем. И забугорным продуктом не нужно будет пользоваться. :)
А касаемо нашей истории - всё же, каким образом практически перевести сотни циферок пикселей в юниты ? »
Смотря на чем.
Хе, а ты займись, сделай визуальный редактор. »
Вот те раз... Может мне и ОС под свои нужды написать ? :) Я прошу помощи при существующем положении вещей.
Смотря на чем. »
А вот это без разницы, хоть используя древнюю шумерскую письменность :) - важен положительный результат в среде Windows. Ты же сам приводил наброски с использованием GetDialogBaseUnits...
kotkovets
25-11-2011, 12:35
GetDialogBaseUnits »
Эта функция непригодна практически, она не учитывает шрифт диалога, тупо
делит на половину циферки, т.е имеем 50 пикселей, возвращает 25 юнитов, соотношение 1:2, хотя на самом деле соотношение 1:~1,5
Посмотрев сырцы nsDialogs, плаг конвертит с помощью функции:
http://www.firststeps.ru/mfc/steps/help/r.php?604
Если сильно чешется, могу сварганить макрос, правда насчет результатов, не знаю.
Функция требует хэндл диалога и размер прямоугольника диалога,
что на практике NSIS не удобно, 2 структуры еще нужно объявлять.
Да и в ручную как то интереснее все это рисовать и рассчитывать »
Я тоже такого мнения :)
Не удаляется ни так , ни так....
Включены:
!include "WordFunc.nsh"
!include "TextFunc.nsh" »
Вопрос в том, как и где пользуетесь, а в остальном все работает безупречно, ИМХО
могу сварганить макрос, правда насчет результатов, не знаю. »
Да чёрт с ним... Слишком много возни. Будем по старинки юниты двигать... :)
wolkow70
25-11-2011, 15:01
Вопрос в том, как и где пользуетесь, а в остальном все работает безупречно, ИМХО »
Section /o "Запретить в Hosts доступ к серверу" Hosts
FileOpen $0 "$temp\urs_temp.txt" w
FileWrite $0 "127.0.0.1 www.ursoftware.com"
FileClose $0
${FileJoin} "$SYSDIR\drivers\etc\hosts" "$temp\urs_temp.txt" ""
Delete "$temp\urs_temp.txt"
SectionEnd
Section Uninstall Uninstall
SectionIn 1 RO
;
${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com$\r$\n' "" "+" '$R9'
RMDir /r "$INSTDIR"
SetAutoClose true
SectionEnd
Не работает удаление...
wolkow70
25-11-2011, 16:45
Товарищи вопрос: имею в реестре скрытый ключ типа EXECryptor 2+
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved\{34C86D6A-B57C-09D5-FE48-F0781F318B3F}|0|]
простая запись на удаление ни к чему не приводит. Его можно грохнуть через деинсталлятор?
Подскажите пожалуйста, каким образом реализовать активность кнопки2 (не акт по умолчанию), при нажатии кнопки1 и
снятие активности с кнопки2 при ещё одном (повторном) нажатии на кнопку1 ?
kotkovets
25-11-2011, 16:52
Section Uninstall Uninstall
SectionIn 1 RO
;
${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com$\r$\n' "" "+" '$R9'
RMDir /r "$INSTDIR"
SetAutoClose true
SectionEnd »
И что это ? бред!
Вы открыли файл текстовый для записи/редактирования?
Вы как получаете строки из текстового файла в $R9 ?
Читайте "Замена строки в текстовых файлах"
Подскажите пожалуйста, каким образом реализовать активность кнопки2 (не акт по умолчанию), при нажатии кнопки1 и
снятие активности с кнопки2 при ещё одном (повторном) нажатии на кнопку1 ? »
Поступаем хитро и с фантазией, в зависимости от доступности кнопки меняем название
кнопки, добавление/удалением символа & - этот символ не виден!
!include "MUI2.nsh"
Page custom Pageкнопа
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
ShowInstDetails show
Name "EnumChildWindows"
OutFile UserInfo.exe
Section
SectionEnd
Function Pageкнопа
nsDialogs::Create 1018
Pop $0
${NSD_CreateButton} 0u 0u 50u 20u "Button&"
Pop $R0
EnableWindow $R0 0
${NSD_CreateButton} 70u 0u 50u 20u "Button 1"
Pop $R1
${NSD_OnClick} $R1 Button
nsDialogs::show
FunctionEnd
Function Button
Pop $R1
${NSD_GetText} $R0 $1
${If} $1 == "Button&"
EnableWindow $R0 1
${NSD_SetText} $R0 "Button"
${Else}
EnableWindow $R0 0
${NSD_SetText} $R0 "Button&"
${EndIf}
FunctionEnd
wolkow70
25-11-2011, 17:51
Так сделал, все равно не удаляется.
!include "TextFunc.nsh"
!include "WordFunc.nsh"
Function un.Replace
${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com$\r$\n' "" "+" '$R9'
Push $0
FunctionEnd
;
Section Uninstall Uninstall
SectionIn 1 RO
;
${LineFind} "$SYSDIR\drivers\etc\hosts" "" "1:-1" "un.Replace"
RMDir /r "$INSTDIR"
SetAutoClose true
SectionEnd
kotkovets
25-11-2011, 18:02
Error: resolving uninstall function "Replace" in uninstall section "Uninstall" (0)Все пользовательские функции в деинсталляторе задаются через приставку un.
Function un.Replace
${WordReplace} '$R9' 'Counter-Strike' 'www.counter-strike.net' "+" '$R9'
Push $0
FunctionEnd
Section Uninstall
${LineFind} "$EXEDIR\file.txt" "" "1:-1" "un.Replace"
SectionEnd
wolkow70
25-11-2011, 18:21
Все пользовательские функции в деинсталляторе задаются через приставку un. »
Сделал через un. Все равно, не удаляется...
Function un.Replace
${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com$\r$\n' "" "+" '$R9'
Push $0
FunctionEnd
;
Section Uninstall Uninstall
SectionIn 1 RO
;
${LineFind} "$SYSDIR\drivers\etc\hosts" "" "1:-1" "un.Replace"
RMDir /r "$INSTDIR"
SetAutoClose true
SectionEnd
kotkovets
25-11-2011, 19:05
wolkow70, Проснитетесь!
У вас целостная строка строка есть в файле: 127.0.0.1 www.ursoftware.com
Скопируйте эту строку из текста, как есть, здесь все учитывается, пробелы, табуляция и т.д
Макрос сравнивает посимвольно строку, если указанная строка не совпадает, до свидания, ничего менять не будет
А если последняя строка и при условии, что нет после искомой строки пустой строки.
то так:
${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com' "" "+" '$R9'
---
Function un.Replace
MessageBox MB_OK "$R9" ;сюда возвращаются строки
;или лучше
DetailPrint "$R9"
${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com$\r$\n' "" "+" '$R9'
Push $0
FunctionEnd
Все работает проверено 1000 раз и сам так делаю!!!!
wolkow70
25-11-2011, 19:54
kotkovets,
Прикольно получается: если два раза подряд прописать, то одна строка удаляется, а последняя нет. Повторный запуск деинсталлятора тоже ее не трогает. А откуда мне знать последняя там строка или нет. И вообще сколько раз повторяется.
kotkovets
25-11-2011, 23:29
Прикольно получается: если два раза подряд прописать, то одна строка удаляется, а последняя нет »
Function un.Replace
${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com$\r$\n' "" "+" '$R9'
${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com' "" "+" '$R9'
Push $0
FunctionEnd
И не трудно догадаться что, делать... Здесь цикл от первой строки до последней строки файла.
Хоть сколь угодно прописываете строку - удалятся все, главное указываемая строка совпадала с возвращенной из текста.
wolkow70
26-11-2011, 13:40
kotkovets,
Может подскажите, чего делать?
Прописываю в секции:
DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{1F642286-85BA-DEC3-B727-47952F83BB84}" ""
DeleteRegValue HKLM "SOFTWARE\Licenses" "{I1A025C51A1747CC8}"
DeleteRegValue HKLM "SOFTWARE\Licenses" "{01A025C51A1747CC8}"
DeleteRegValue HKLM "SOFTWARE\Licenses" "{R7C0DB872A3F777C0}"
DeleteRegValue HKLM "SOFTWARE\Licenses" "{K7C0DB872A3F777C0}"
;
WriteRegBin HKLM "SOFTWARE\Licenses" "{R7C0DB872A3F777C0}" 560b9db5
WriteRegBin HKLM "SOFTWARE\Licenses" "{K7C0DB872A3F777C0}" 1f51f2f567121fffffffffee06959cafee6049ac81f3746f9c6616560b9db5f310cd2e736167a8ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff000000006f9c661667121fffffffffee06959cafee6049ac81f374 6f9c6616560b9db5f310cd2e736167a8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000000006f9c66160000
WriteRegBin HKLM "SOFTWARE\Licenses" "{I1A025C51A1747CC8}" 15000000
WriteRegBin HKLM "SOFTWARE\Licenses" "{01A025C51A1747CC8}" 5b3e860fef81a3b4066f27ff5ac429d8b45ee10cbdd264d89fcaccf1b1d3c36edddf6218c75e58436165b5a3d9baac99aee5 0d496761630b27c263908122680335b32f7f6babd12fe90613ae194f75851f0aefa3e1ba48d58b799f2749852f4f09b5a5d9 591110866be8c77645b1876ea71ed3da3d7be5fd7f9bd03a93c5e4e195634bd62d35d8c553c2a5934ae68b8bb2a19bf3eb3a 56e72c9db114197f746b
То есть удаляю данные старой лицензии и вношу новые. все равно при запуске программы восстанавливаются старые данные.
Если те же ключи
HKLM "SOFTWARE\Classes\CLSID\{1F642286-85BA-DEC3-B727-47952F83BB84}" ""
HKLM "SOFTWARE\Licenses" "{I1A025C51A1747CC8}"
HKLM "SOFTWARE\Licenses" "{01A025C51A1747CC8}"
HKLM "SOFTWARE\Licenses" "{R7C0DB872A3F777C0}"
HKLM "SOFTWARE\Licenses" "{K7C0DB872A3F777C0}"
удалить не через NSIS а в программе TrashReg, то все нормально..
kotkovets
26-11-2011, 14:15
все равно при запуске программы восстанавливаются старые данные »
Однозначно программа перезаписывает.
удалить не через NSIS а в программе TrashReg, то все нормально.. »
Не стоит, через NSIS ломать защиту армадилио, в которую вшита в прогу и создает скрытые записи в реестре.
wolkow70
01-12-2011, 14:45
kotkovets,
Подскажите плиз, как комманду из cmd-файла конвертировать в NSIS для выполнения в тихом режиме:
TrashReg.exe /D=(!)HKLM\SOFTWARE\Classes\CLSID\{1F642286-85BA-DEC3-B727-47952F83BB84}
При условии, что данный кюч реестра создан.
kotkovets
01-12-2011, 15:24
TrashReg.exe /D=(!)HKLM\SOFTWARE\Classes\CLSID\{1F642286-85BA-DEC3-B727-47952F83BB84} »
IfSilent 0 +2
ExecWait '"Путь к TrashReg.exe" /D=(!)HKLM\SOFTWARE\Classes\CLSID\{1F642286-85BA-DEC3-B727-47952F83BB84}'
1) Подскажите как изменить картинку на странице выбора языка. Она распологается с лева.
2). Иконку инсталяции и деинсталяции (которая находится в левом верхнем углу, почти всех диалоговых окон).
dix75,
это же иконка инсталлятора :dont-know
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC