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

wolkow70
13-05-2012, 11:44
вроде бы по русскому говорю... »

Не "по русскому", а "по русски" :).
А сделал я все ориентируясь на пример из справки.

wolkow70
13-05-2012, 13:42
ну тут же очевидно, идет запись в реестр, сам макрос MUI_STARTMENU_WRITE_END »

Я так сделал, все работает как надо.

Section "Создать ярлыки в меню Пуск" StartMenu
${If} ${RunningX64}
SetRegView 64
SetShellVarContext all
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Удалить ${PRODUCT_NAME}.lnk" "$INSTDIR\Uninstall.exe" 0
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\${PRODUCT_NAME}.lnk" "$INSTDIR\MyApp.exe"
!insertmacro MUI_STARTMENU_WRITE_END
SetRegView 32
${Else}
SetShellVarContext all
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Удалить ${PRODUCT_NAME}.lnk" "$INSTDIR\Uninstall.exe" 0
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\${PRODUCT_NAME}.lnk" "$INSTDIR\MyApp.exe"
!insertmacro MUI_STARTMENU_WRITE_END
${EndIf}
SectionEnd

kotkovets
13-05-2012, 14:08
wolkow70, можно проще, зачем повторно прописывать команды?

Section "Создать ярлыки в меню Пуск" StartMenu
${IfThen} ${RunningX64} ${|}SetRegView 64${|}
SetShellVarContext all
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Удалить ${PRODUCT_NAME}.lnk" "$INSTDIR\Uninstall.exe" 0
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\${PRODUCT_NAME}.lnk" "$INSTDIR\MyApp.exe"
!insertmacro MUI_STARTMENU_WRITE_END
${IfThen} ${RunningX64} ${|}SetRegView 32${|}
SectionEnd

Olef2387
13-05-2012, 23:07
Привет.

Продолжаю изучение NSIS... Задачка

Есть 20 компонентов. При установке юзер должен выбрать 1 из этих 20.
На эту тему нашёл информацию в справке. И всё работает.
Пример на 6 компонентах

Section /o "Компонент №1" ID_1
SectionEnd

Section /o "Компонент №2" ID_2
SectionEnd

Section /o "Компонент №3" ID_3
SectionEnd

Section /o "Компонент №4" ID_4
SectionEnd

Section /o "Компонент №5" ID_5
SectionEnd

Section /o "Компонент №6" ID_6
SectionEnd

Function .onSelChange

!insertmacro StartRadioButtons $1
!insertmacro RadioButton ${ID_1}
!insertmacro RadioButton ${ID_2}
!insertmacro RadioButton ${ID_3}
!insertmacro RadioButton ${ID_4}
!insertmacro RadioButton ${ID_5}
!insertmacro RadioButton ${ID_6}
!insertmacro EndRadioButtons

FunctionEnd

Нужно дополнить...
1. Чтобы кнопка ДАЛЕЕ была неактивна пока не будет выбран 1 из компонентов.
2. Так как компонентов много, хотелось бы их объединить в группу... Команда SectionGroup объединяет их в группу, но там если галочку нажать - выбираются сразу все компоненты в группе... А у меня в данном случае только 1 компонент должен быть выбран.

Вот так. Извиняюсь, если опять что-то наиэлементарнейшее спросил :)

kotkovets
14-05-2012, 14:23
1. Чтобы кнопка ДАЛЕЕ была неактивна пока не будет выбран 1 из компонентов.
2. Так как компонентов много, хотелось бы их объединить в группу... Команда SectionGroup объединяет их в группу, но там если галочку нажать - выбираются сразу все компоненты в группе... А у меня в данном случае только 1 компонент должен быть выбран »
ну можно как-то так на скорую руку:
OutFile "example.exe"

var hInst

!include "MUI2.nsh"

!insertmacro MUI_PAGE_WELCOME
;функция во время открытия странички компонентов
!define MUI_PAGE_CUSTOMFUNCTION_SHOW COMPONENTS_SHOW
;---------------------------------------------------
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE Russian

;макрос проверки секций, если одна из секций отмечена возврат - 1, иначе - 0;
;в intsec - указываем количество секций в скрипте
!macro CheckSection intsec ret
Push ${intsec}
System::Store SR2
${For} $R0 1 $R2
SectionGetFlags $R0 $R1
${IfThen} $R1 == 1 ${|}${Break}${|}
${Next}
Push $R1
System::Store L
Pop ${ret}
!macroend


SubSection /e test IDS_1

Section /o "Компонент №1" ID_1
SectionEnd

Section /o "Компонент №2" ID_2
SectionEnd

Section /o "Компонент №3" ID_3
SectionEnd

Section /o "Компонент №4" ID_4
SectionEnd

Section /o "Компонент №5" ID_5
SectionEnd

Section /o "Компонент №6" ID_6
SectionEnd

SubSectionEnd

Function .onSelChange
!insertmacro StartRadioButtons $1
!insertmacro RadioButton ${ID_1}
!insertmacro RadioButton ${ID_2}
!insertmacro RadioButton ${ID_3}
!insertmacro RadioButton ${ID_4}
!insertmacro RadioButton ${ID_5}
!insertmacro RadioButton ${ID_6}
!insertmacro EndRadioButtons
!insertmacro CheckSection 6 $R0
StrCmp $R0 0 0 +2
EnableWindow $hInst ${SW_HIDE} ;отключаем кнопку "установить"
StrCmp $R0 1 0 +2
EnableWindow $hInst ${SW_SHOW} ;включаем кнопку "установить"
FunctionEnd

Function .OnInit
StrCpy $1 ${ID_1}
SectionSetFlags ${IDS_1} ${SECTION_OFF} ;фиктивно отключаем группу
FunctionEnd

Function COMPONENTS_SHOW
GetDlgItem $hInst $HWNDPARENT 1 ;находим HWND кнопки "установить"
!insertmacro CheckSection 6 $R0
StrCmp $R0 0 0 +2
EnableWindow $hInst ${SW_HIDE} ;отключаем кнопку "установить"
StrCmp $R0 1 0 +2
EnableWindow $hInst ${SW_SHOW} ;включаем кнопку "установить"
FunctionEnd

Olef2387
14-05-2012, 14:43
Блестяще, что тут ещё сказать. Большое спасибо

Правда, компоненты в группе раскрыты, как можно сделать чтоб по умолчанию они были свёрнуты?
Команду SubSection /e test IDS_1
изменил на SubSection test IDS_1

всё равно раскрыты компоненты..

kotkovets
14-05-2012, 15:58
всё равно раскрыты компоненты.. »
вместо:
SectionSetFlags ${IDS_1} ${SECTION_OFF}
прописать:
SectionSetFlags ${IDS_1} -290

wolkow70
19-05-2012, 08:48
kotkovets,

Можете помочь в таком вопросе:

Работает такая конструкция:

ReadRegStr $R6 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Opera 11.64.1403" "InstallLocation"
RMDir /r "$R6"

Стоит задача найти директорию установки независимо от версии и удалить.

Пробую так:

Function EnumReg
${If} $5 == "Opera"
;
DetailPrint "Раздел реестра: $1"
DetailPrint "Имя параметра: $2"
DetailPrint "Тип параметра: $4"
DetailPrint "Значение параметра: $3"
StrCpy "$5" "$1"
StrCpy $0 StopRegFind
${EndIf}
FunctionEnd

Не срабатывает.


${RegFind} "${HKLM}\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" "/T=REG_SZ /V=1" EnumReg

kotkovets
19-05-2012, 11:41
Не срабатывает.
${RegFind} "${HKLM}\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" "/T=REG_SZ /V=1" EnumReg »
А с какого перепугу????!!! нет же в реестре ключа -SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Opera
зато есть - SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Opera****
---
Читайте и изучайте - StrCpy - там все по полочкам с примерами расписано.
---
Section
${RegFind} "${HKLM}\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" "/T=REG_SZ /V=1" EnumReg
MessageBox MB_OK "$5" IDOK
SectionEnd

Function EnumReg
StrCpy $5 $1 5 52
${If} $5 == "Opera"
${AndIf} $2 == "InstallLocation"
StrCpy $5 $3
StrCpy $0 "StopRegFind"
${EndIf}
FunctionEnd

bugmenotagain
20-05-2012, 00:48
Доброй ночи. Пожалуйста, помогите разобраться. Пытаюсь с помощью плагина AccessControl зачистить хвосты от драйвера:

AccessControl::GrantOnRegKey \
HKLM "SYSTEM\CurrentControlSet\Enum\Root\LEGACY_SIMPLE" "(BU)" "Delete"
Код работает, но только под XP, а надо бы конечно мультиплатформу. Желательно бы XP-Vista-7.

DruOleg
23-05-2012, 18:07
Привет всем!
Прошу помочь с обработкой файла.
В ходе установки получаем файл - result.txt.
Файл содержит в себе:

STR
--------------------
0400

(обработано строк: 1)



Нужно узнать какое значение в нем стоит - 0400 или другое. (через сравнение)

kotkovets
23-05-2012, 18:45
В ходе установки получаем файл - result.txt. »
а подробней, почему в какой-то файл(еще нужно прочитать и обработать), а не сразу в указанную переменную?

DruOleg
24-05-2012, 10:41
а подробней, почему в какой-то файл(еще нужно прочитать и обработать), а не сразу в указанную переменную? »
Выполняю запрос к БД:

ExecWait '"sqlcmd" -S "$DB_server" -U "$DB_user" -P "$DB_password" -d "$DB_name" -i "$Temp\Fix_IIRF\get_revision.sql" -o "$Temp\Fix_IIRF\result.txt"'

Как полученный результат присвоить переменной не знаю.

kotkovets
24-05-2012, 11:02
DruOleg, И как прочитать содержимое файла, тоже не знаете?
И что в переменную $0 возвращает?
ExecWait '"sqlcmd" -S "$DB_server" -U "$DB_user" -P "$DB_password" -d "$DB_name" -i "$Temp\Fix_IIRF\get_revision.sql" -o ' $0

DruOleg
24-05-2012, 11:10
DruOleg, И как прочитать содержимое файла, тоже не знаете? »
Пробовал так:

ClearErrors
FileOpen $0 $INSTDIR\file.dat r
IfErrors done
FileRead $0 $1
DetailPrint $1
FileClose $0
done:

Прочитал только первую строку.

И что в переменную $0 возвращает? »
Возвращает - 0.
Если пароль неверно указать - возвращает - 1.

DruOleg
24-05-2012, 11:42
Нужно узнать какое значение в нем стоит - 0400 или другое. (через сравнение) »
Коряво, но вроде реализовал...

Section

ClearErrors
FileOpen $0 "$Temp\NS_Fix_IIRF\result.txt" r
IfErrors done
FileRead $0 $1
FileRead $0 $1
FileRead $0 $1
StrCpy "$REV" $1
FileClose $0
done:

SectionEnd

wolkow70
24-05-2012, 11:52
kotkovets,
Подскажите пожалуйста как в режиме генератора ответов избежать вывода некоторых страниц?

!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOWWELCOME
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "${pkgdir}\Winamp\License.txt"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOWDIRECTORY
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOWCOMPONENTS
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
!define MUI_PAGE_CUSTOMFUNCTION_PRE PREINSTFILES
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN "$INSTDIR\winamp.exe"
!define MUI_FINISHPAGE_RUN_TEXT "Запустить Winamp"
!define MUI_FINISHPAGE_RUN_NOTCHECKED
!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOWFINISH
!insertmacro MUI_PAGE_FINISH

Желательно бы не выводить страницу показа лицензии и выбора папки StartMenu
и не показывать на Finishpage опцию "запустить".

DruOleg
24-05-2012, 12:13
Коряво, но вроде реализовал... »
У кого-нибудь есть примеры с циклами? Чтобы так не извращаться...

DruOleg
24-05-2012, 12:34
У кого-нибудь есть примеры с циклами? Чтобы так не извращаться... »
Реализовал так:)

${While} $1 != "0400"
FileRead $0 $1
StrCpy "$1" "$1" 4
${EndWhile}
StrCpy "1""$REV" $1


Работает. Но если значение в файле нет такого значения - зацикливается:-(
Кто знает как поправить?

DruOleg
24-05-2012, 16:17
Прошу помочь с ведением лога.



Section ;Вывод первичной информации

${If} $OS_type != "WinXP"
MessageBox MB_OK "Данный фикc преднозначен только для ОС WindowsXP x32"
DetailPrint "Неподдерживаемый тип ОС: $OS_type"
;Abort
${Else}
DetailPrint "Тип ОС: $OS_type"
${EndIf}

${If} $Type != "МЕНЯ"
MessageBox MB_OK "Данный фикc преднозначен только для МЕНЯ!"
DetailPrint "Неподдерживаемый тип продукта: $Type"
;Abort
${EndIf}

${If} $Version != "7.10"
MessageBox MB_OK "Данный фикc преднозначен только для МЕНЯ!"
DetailPrint "Неподдерживаемый тип $Type: $Version"
;Abort
${Else}
DetailPrint "Версия $Type: $Version"
${EndIf}

SectionEnd


Данные считываются в Function .onInit

Если падает на первой секции в лог не чего не пишется.
Лог подключил методом из FAQ.




© OSzone.net 2001-2012