PDA

Показать полную графическую версию : [архив].: NSIS - все вопросы :.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 [98] 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170

Krinkels
25-11-2011, 11:19
А ведь куда проще и быстрее расположить визуально элементы и ещё при этом получить готовый код. »
Хе, а ты займись, сделай визуальный редактор. И будет счастье всем. И забугорным продуктом не нужно будет пользоваться. :)

А касаемо нашей истории - всё же, каким образом практически перевести сотни циферок пикселей в юниты ? »
Смотря на чем.

MKN
25-11-2011, 12:03
Хе, а ты займись, сделай визуальный редактор. »
Вот те раз... Может мне и ОС под свои нужды написать ? :) Я прошу помощи при существующем положении вещей.
Смотря на чем. »
А вот это без разницы, хоть используя древнюю шумерскую письменность :) - важен положительный результат в среде 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" »
Вопрос в том, как и где пользуетесь, а в остальном все работает безупречно, ИМХО

MKN
25-11-2011, 12:59
могу сварганить макрос, правда насчет результатов, не знаю. »
Да чёрт с ним... Слишком много возни. Будем по старинки юниты двигать... :)

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|]
простая запись на удаление ни к чему не приводит. Его можно грохнуть через деинсталлятор?

MKN
25-11-2011, 16:50
Подскажите пожалуйста, каким образом реализовать активность кнопки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}'

dix75
03-12-2011, 21:40
1) Подскажите как изменить картинку на странице выбора языка. Она распологается с лева.
2). Иконку инсталяции и деинсталяции (которая находится в левом верхнем углу, почти всех диалоговых окон).

vahe-91
04-12-2011, 14:42
dix75,
это же иконка инсталлятора :dont-know




© OSzone.net 2001-2012