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

diakov
22-12-2011, 17:38
kotkovets, а если прописано уже

${If} ${RunningX64}
SetOutPath "$INSTDIR"

то инстальник определит уже на вин х64 папку установки Program Files а не Program Files х86 верно?

kotkovets
22-12-2011, 17:40
Вот меня и интересует какие ключи обычно требуют редеректа, а какие нет »
Вопрос не в тему, ставите себе х64 и анализируйте
все зависит от программ и какие условия установки эти программы требуют »
Уже третий раз цитирую :closed-to
то инстальник определит уже на вин х64 папку установки Program Files »
Читайте в справочнике <<Преопределённые переменные>>, там все расписано на русском языке:

Предопределенных констант несколько:
$PROGRAMFILES, $PROGRAMFILES32, $PROGRAMFILES64 — папка Program files. В 64разрядной системе констатация $PROGRAMFILES и $PROGRAMFILES32 представляют папку C:\Program Files (x86), а $PROGRAMFILES64 - C:\Program Files.
$COMMONFILES, $COMMONFILES32, $COMMONFILES64 — по аналогии с предыдущей константой, ссылается на C:\Program Files\Common Files.

wolkow70
22-12-2011, 17:47
Вопрос не в тему, ставите себе х64 и анализируйте »
Да нету у меня X64 и процессор не поддерживает виртуализацию.

kotkovets
22-12-2011, 18:06
wolkow70, Я могу написать программку (в теории, не 64-битную) и инсталлятор к нему,
так вот я делаю так, что в программа не будет работать в х64 без записи ключа в 64-битном реестре,
на примере, который я приводил (Nero11) без этого ключа не будут работать переключения в проге с
NeroExpress.exe на Nero.exe и наоборот, а в остальном прога работать будет.
а нету у меня X64 и процессор не поддерживает виртуализацию. »
если процессор х86(почти все современные процессы - 99% позволяют работать в х64), то ставите себе,
к примеру x32 и параллельно x64 - появится меню выбора меню загрузки ОС.
А где взять х64? в интернете... да где угодно, как говорится, если сильно захотеть...

wolkow70
22-12-2011, 18:22
kotkovets,
Сделал сейчас по вашей рекоммендации так:
${If} ${FileExists} "$DOCUMENTS\Opera Backup"
StrCpy $2 0 ;иницилизируем счетчик в нуль
FindFirst $0 `$1` "$DOCUMENTS\Opera Backup*" ;поиск по маске Opera Backup
${Do}
IntOp $2 $2 + 1 ;счетчик папок начинающийся с названия Opera Backup
FindNext $0 `$1`
${LoopUntil} $1 == ``
FindClose $0 ;закрываем поиск
${If} $2 != 0
Rename "$DOCUMENTS\Opera Backup" "$DOCUMENTS\Opera Backup_old$2" ;переименовываем предыдущую папку "Opera Backup"
CreateDirectory "$DOCUMENTS\Opera Backup" ;создаем новую папку "Opera Backup"
${EndIf}
${Else}
CreateDirectory "$DOCUMENTS\Opera Backup"
${EndIf}

Все работает, количество резервных папок может быть любым.
Возник вопрос:
Эта логическая конструкция применена к SetShellVarContext current ("Мои документы"/многопользовательская установка).
Можно ли в пределах одной функции onInit повторить ее еще раз для SetShellVarContext all
(папка "Общие документы"/однопользовательская установка)?
Или нужно "обнулять" значения переменных или вводить другие переменные, или ничего не нужно делать (написать также)?

kotkovets
22-12-2011, 18:39
Можно ли в пределах одной функции onInit повторить ее еще раз для SetShellVarContext all »
Условно повторяющийся код обычно выводят в функцию или в макрос - хороший тон кодинга.
Function OperaBackup
${If} ${FileExists} "$DOCUMENTS\Opera Backup"
StrCpy $2 0
FindFirst $0 `$1` "$DOCUMENTS\Opera Backup*"
${Do}
IntOp $2 $2 + 1
FindNext $0 `$1`
${LoopUntil} $1 == ``
FindClose $0
${If} $2 != 0
Rename "$DOCUMENTS\Opera Backup" "$DOCUMENTS\Opera Backup_old$2"
CreateDirectory "$DOCUMENTS\Opera Backup"
${EndIf}
${Else}
CreateDirectory "$DOCUMENTS\Opera Backup"
${EndIf}
FunctionEnd

Function .onInit
SetShellVarContext current
Call OperaBackup
SetShellVarContext all
Call OperaBackup
FunctionEnd

diakov
22-12-2011, 20:07
kotkovets, такая байда переменная $PROGRAMFILES64 и для х86 папка Program files и для х64 папка Program files

когда пишу InstallDir "$PROGRAMFILES64\CCleaner"

а в секции
${If} ${RunningX64}
SetOutPath "$INSTDIR"
File /r "D:\CCleaner\*.*"

инстальник ставит путь ProgramFiles но кнопка установить не активна

а если делаю так

InstallDir "$PROGRAMFILES\CCleaner"

Всё разобрался!

а в секции
${If} ${RunningX64}
SetOutPath "$PROGRAMFILES64\CCleaner"
File /r "D:\CCleaner\*.*"

то инстальник ставит путь ProgramFiles (x86) и ставиться все гуд

Вопрос в чем не гуд?)

Всё разобрался!

diakov
22-12-2011, 21:29
kotkovets, как изменить это

http://s016.radikal.ru/i336/1112/37/9ef0f75c0f71.jpg

пишу


!insertmacro MUI_PAGE_WELCOME
!define MUI_LICENSEPAGE_TEXT_TOP "Перед установкой ознакомьтесь с этой информацией:"
!define MUI_LICENSEPAGE_TEXT "Вы прочли справочник по NSIS"
!define MUI_LICENSEPAGE_BUTTON "Далее >"
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\COPYING.rtf"
Page custom PageInit PageDestroy
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"


Меняет только "Перед установкой ознакомьтесь с этой информацией:" и "Далее >"

Но Вы прочли справочник по NSIS не меняет внизу...
писал !define MUI_PAGE_LICENSE_HEADER_TEXT "Справочник по NSIS"
!define MUI_PAGE_LICENSE_HEADER_TEXT "Справочник по NSIS"

не действует, в чем дело?
Спасибо!

kotkovets
22-12-2011, 21:54
не действует, в чем дело? »
Опечатка, спасибо, что заметили!
!define MUI_LICENSEPAGE_TEXT_BOTTOM "Вы прочли справочник по NSIS"
Меняем текст в заголовке, когда страничка лицензии открывается
!define MUI_LICENSEPAGE_TEXT_TOP "Перед установкой ознакомьтесь с этой информацией:"
!define MUI_LICENSEPAGE_TEXT_BOTTOM "Вы прочли справочник по NSIS"

!include "MUI2.nsh"
!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOW_LICENSE
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\COPYING"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

Function SHOW_LICENSE
!insertmacro MUI_HEADER_TEXT "Вот оно как" "...!"
FunctionEnd

diakov
22-12-2011, 21:56
А как изменить в шапке?)

Лицензионное соглашение
и Перед установкой ссклинер....

Function SHOW_LICENSE
!insertmacro MUI_HEADER_TEXT "Вот оно как" "...!"
FunctionEnd »

Я так пробовал но писал MUI_PAGE_LICENSE) Спасибо счас сбацаю!

kotkovets, почему когда я хочу указать путь тихой установки вот так CCleaner-3.1.4.1616.exe /S /port /D=C:\CCleaner

инстальник всеравно распаковывает в папку с ехе-шником?

kotkovets
22-12-2011, 22:29
почему когда я хочу указать путь тихой установки вот так CCleaner-3.1.4.1616.exe /S /port /D=C:\CCleaner »
Все очень просто, запустите с ключом: /S /port /D=C:\CCleaner
Ключ D помещает свое значение в переменную $INSTDIR
И смотрите в скрипте на сообщение:
!include "MUI2.nsh"
!include "FileFunc.nsh"

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
OutFile "test.exe"

var Radio
var Radio1

Function .OnInit
ClearErrors
${GetOptions} "$CMDLINE" "/port" $R0
${If} ${Silent} ;если тихий режим
${IfNot} ${Errors}
;здесь будет код выполняться с ключом /port в тихом режиме
StrCpy $Radio1 1 ;распаковка портативной версии
StrCpy $Radio 0 ;запрет установки в обычном режиме
${Else}
;здесь будет код выполняться в тихом режиме без ключей (по умолчанию)
StrCpy $Radio1 0 ;запрет портативной версии
StrCpy $Radio 1 ;установка в обычном режиме
${EndIf}
${Else}
ClearErrors
${EndIf}
FunctionEnd

Section
${If} $Radio == 1
MessageBox MB_OK "Обычная установка в тихую" IDOK
${ElseIf} $Radio1 == 1
MessageBox MB_OK "Портативная распаковка$\n\
Папка распаковки: $INSTDIR" IDOK
${Else}
MessageBox MB_OK "Обычная установка" IDOK
${EndIf}
SectionEnd

diakov
22-12-2011, 22:49
kotkovets, А как сделать что бы после установки в MUI_PAGE_FINISH стояла галка запустить программу, а если распаковывалась портабл весрия то что бы галки не было?

kotkovets
22-12-2011, 23:05
diakov, Да все так же, когда страница финиша открывается...
Если портативка, то $Radio=1, а в хедере NSIS\Contrib\Modern UI 2\Pages\Finish.nsh объявлена
переменная $mui.FinishPage.Run - это хэндл чекбокса, а раз есть хэндл делаем с контролом почти все, что захотим...
!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOW_FINISH
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"

Function SHOW_FINISH
${If} $Radio1 == 1
ShowWindow $mui.FinishPage.Run 0 ;скрываем чекбокс
${NSD_SetState} $mui.FinishPage.Run 0 ;и делаем чекбокс неотмеченным
${EndIf}
FunctionEnd

diakov
22-12-2011, 23:07
Как всегда спасибо! Железное у тебя терпение kotkovets :)

kotkovets
22-12-2011, 23:14
Железное у тебя терпение kotkovets »
У меня терпения не хватает, когда человек просто тупит...и не хочет включать мозг

diakov
22-12-2011, 23:49
kotkovets, подскажи уже минут 40 парюсь есть

!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
!define BRANDING "RePack by D!akov"


есть

Function myGuiInit
GetDlgItem $0 $HWNDPARENT 1028
Linker::link /NOUNLOAD $0 "http://forum.oszone.net/"
FunctionEnd

Function .onGUIEnd
Linker::unload
FunctionEnd

плагин Linker.dll для NSIS есть

убран флаг "WS_DISABLED" с элемента 1028

раньше все работало а сейчас текст выглядит как ссылка но не кликабельный :durak:



!define PRODUCT_NAME "CCleaner"
!define PRODUCT_VERSION "3.1.4.1616"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!include "MUI2.nsh"
!include "FileFunc.nsh"
!include "x64.nsh"
SetCompressor /SOLID lzma


!define MUI_ABORTWARNING
!define MUI_ICON "D:\cleaner.ico"
!define MUI_UNICON "D:\cleaner.ico"
!define MUI_HEADERIMAGE
!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
!define BRANDING "RePack by D!akov"

var dlg
var Label
var Check
var Check1
var Check2
var Check3
var CheckBox
var CheckBox1
var CheckBox2
var CheckBox3
var Radio
var Radio1
var RadioButton
var RadioButton1
var ImageHandle
var Image

!insertmacro MUI_PAGE_WELCOME
!define MUI_LICENSEPAGE_TEXT_TOP "Перед установкой ознакомьтесь с этой информацией:"
!define MUI_LICENSEPAGE_TEXT_BOTTOM "Ознакомились! Отлично жмите 'Далее'."
!define MUI_LICENSEPAGE_BUTTON "Далее >"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOW_LICENSE
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\COPYING.rtf"
Page custom PageInit PageDestroy
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"

Function myGuiInit
GetDlgItem $0 $HWNDPARENT 1028
Linker::link /NOUNLOAD $0 "http://forum.oszone.net/"
FunctionEnd

Function .onGUIEnd
Linker::unload
FunctionEnd

Function SHOW_LICENSE
!insertmacro MUI_HEADER_TEXT "Информация" "Инструкции, описание изменений в версии программы."
FunctionEnd


; Описание фаqла
VIProductVersion "${PRODUCT_VERSION}"
VIAddVersionKey /LANG=${LANG_Russian} "CompanyName" "RePack by D!akov"
VIAddVersionKey /LANG=${LANG_Russian} "FileDescription" "${PRODUCT_NAME} ${PRODUCT_VERSION}"
VIAddVersionKey /LANG=${LANG_Russian} "FileVersion" "${PRODUCT_VERSION}"
; Конец описания файла

Name "${PRODUCT_NAME}"
Caption "Установка ${PRODUCT_NAME} ${PRODUCT_VERSION}"
UninstallCaption "Удаление ${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}.exe"
InstallDir "$PROGRAMFILES64\CCleaner"
;ShowInstDetails show
;ShowUnInstDetails show
BrandingText "${BRANDING}"


Function .onInit
InitPluginsDir ;иницилизируем рабочую папку, куда будут распакованы картинки
File "/oname=$PLUGINSDIR\nsis-r.bmp" "${NSISDIR}\Contrib\Graphics\Header\nsis-r.bmp"
File "/oname=$PLUGINSDIR\orange-r.bmp" "${NSISDIR}\Contrib\Graphics\Header\orange-r.bmp"

ClearErrors
${GetOptions} "$CMDLINE" "/port" $R0
${If} ${Silent} ;если тихий режим
${IfNot} ${Errors}
SetOutPath "$EXEDIR\CCleanerPortable"
File /r "D:\CCleanerPortable\*.*"
SetShellVarContext all
;тут пишем все команды при распаковки портативной версии
;здесь будет код выполняться с ключом /port в тихом режиме
StrCpy $Radio1 1 ;распаковка портативной версии
StrCpy $Radio 0 ;запрет установки в обычном режиме
${Else}
${GetOptions} "$CMDLINE" "/inst" $R0
${If} ${RunningX64}
SetShellVarContext all
CreateShortCut "$Desktop\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner64.exe"
${Else}
SetShellVarContext all
CreateShortCut "$Desktop\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner.exe"
${EndIf}
SetShellVarContext all
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
${If} ${RunningX64}
SetShellVarContext all
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner64.exe"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Удалить ${PRODUCT_NAME}.lnk" "$INSTDIR\Удалить CCleaner.exe"
${Else}
SetShellVarContext all
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner.exe"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Удалить ${PRODUCT_NAME}.lnk" "$INSTDIR\Удалить CCleaner.exe"
${EndIf}
SetOutPath "$INSTDIR"
File /r "D:\iNTEGER\*.*"
SetShellVarContext all
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Запустить модуль CCEnhancer.lnk" "$INSTDIR\CCEnhancer.exe"
${If} ${RunningX64}
SetShellVarContext all
SetRegView 64
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell" "" ""
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner" "" ""
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner\command" "" "$INSTDIR\ccleaner64.exe /AUTO"
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner..." "" ""
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner...\command" "" "$INSTDIR\ccleaner64.exe"
${Else}
SetShellVarContext all
SetRegView 32
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner..." "CCRBType" 0x2
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner...\command" "" "$INSTDIR\CCleaner.exe"
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner" "CCRBType" 0x1
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner\command" "" "$INSTDIR\CCleaner.exe /AUTO"
${EndIf}
MessageBox MB_OK "${PRODUCT_NAME} ${PRODUCT_VERSION} установлена в тихом режыме."
;здесь будет код выполняться в тихом режиме без ключей (по умолчанию)
StrCpy $Radio1 0 ;запрет портативной версии
StrCpy $Radio 1 ;установка в обычном режиме
${EndIf}
${Else}
ClearErrors
${EndIf}

FunctionEnd


Function PageInit
!insertmacro MUI_HEADER_TEXT "Выбор типа и компонентов установки" "..."
nsDialogs::Create 1018
Pop $dlg
${NSD_CreateLabel} 0u 0u 120u 12u "Пожалуйста, сделайте выбор:"
Pop $Label
;;
${NSD_CreateRadioButton} 0u 14u 150u 12u "Установка CCleaner 3.14.1616"
Pop $RadioButton
${NSD_SetState} $RadioButton 1 ;делаем радиобутон отмеченным
${NSD_OnClick} $RadioButton RadioButton ;событие отметки радиобутона
;;
${NSD_CreateRadioButton} 0u 28u 160u 12u "Распаковка CCleaner 3.14.1616"
Pop $RadioButton1
${NSD_OnClick} $RadioButton1 RadioButton1 ;событие отметки радиобутона
;;
${NSD_CreateCheckBox} 0u 85u 120u 12u "Ярлык(и) на рабочем столе"
Pop $CheckBox
${NSD_SetState} $CheckBox 1
;;
${NSD_CreateCheckBox} 0u 100u 100u 12u "Ярлыки в меню «Пуск»"
Pop $CheckBox1
${NSD_SetState} $CheckBox1 1
;;;;;;;;;;
${NSD_CreateCheckBox} 0u 115u 300u 12u "Добавить пункт меню корзины 'Открыть/Запустить CCleaner'"
Pop $CheckBox2
${NSD_SetState} $CheckBox2 1
;;;;;;;;
${NSD_CreateCheckBox} 0u 70u 120u 12u "Установить CCEnhancer"
Pop $CheckBox3
${NSD_SetState} $CheckBox3 1
;;;;;;;;;;;;4
${NSD_CreateBitmap} 180u 0u 100% 100% "" ;создаем контрол для картинок
Pop $Image
${NSD_SetImage} $Image "$PLUGINSDIR\nsis-r.bmp" $ImageHandle ;загружаем картинку
nsDialogs::Show
${NSD_FreeImage} $ImageHandle ;удаляем картинку
FunctionEnd

Function switching
${NSD_GetState} $RadioButton $Radio ;снимаем статус отметки радиобуттона
${If} $Radio == 1 ;если радибуттон "Установка обычной версии" отмеченный то...
EnableWindow $CheckBox 1
EnableWindow $CheckBox1 1
EnableWindow $CheckBox2 1
EnableWindow $CheckBox3 1
${NSD_SetState} $CheckBox 1
${NSD_SetState} $CheckBox1 1
${NSD_SetState} $CheckBox2 1
${NSD_SetState} $CheckBox3 1
${NSD_FreeImage} $ImageHandle ;удаляем картинку
${NSD_SetImage} $Image "$PLUGINSDIR\nsis-r.bmp" $ImageHandle ;загружаем картинку
${Else} ;если радибуттон "Установка обычной версии" неотмеченный то...
EnableWindow $CheckBox 0 ;затеняем чекбокс
EnableWindow $CheckBox1 0 ;затеняем чекбокс
EnableWindow $CheckBox2 0 ;затеняем чекбокс
EnableWindow $CheckBox3 0
${NSD_SetState} $CheckBox 0 ;делаем чекбокс неотмеченным
${NSD_SetState} $CheckBox1 0 ;делаем чекбокс неотмеченным
${NSD_SetState} $CheckBox2 0
${NSD_SetState} $CheckBox3 0
${NSD_FreeImage} $ImageHandle ;удаляем картинку
${NSD_SetImage} $Image "$PLUGINSDIR\orange-r.bmp" $ImageHandle ;загружаем картинку
${EndIf}
FunctionEnd
;функции события отметки радиобуттонов
Function RadioButton
Pop $RadioButton
Call switching
FunctionEnd
Function RadioButton1
Pop $RadioButton1
Call switching
FunctionEnd

Function PageDestroy
;функция которая выполняется при закрытии кастомной станички
;снимаем статусы отметок радиобуттонов и чекбоксов
${NSD_GetState} $RadioButton $Radio
${NSD_GetState} $RadioButton1 $Radio1
${NSD_GetState} $CheckBox $Check
${NSD_GetState} $CheckBox1 $Check1
${NSD_GetState} $CheckBox2 $Check2
${NSD_GetState} $CheckBox3 $Check3
FunctionEnd


Section "-Обычная установка"
${If} $Radio == 1
${If} ${RunningX64}
SetOutPath "$INSTDIR"
File /r "D:\CCleaner\*.*"
CreateDirectory "${PRODUCT_NAME}"
SetShellVarContext all
SetRegView 64
WriteRegStr HKEY_CURRENT_USER "Software\Piriform" "" ""
WriteRegStr HKEY_CURRENT_USER "Software\Piriform\CCleaner" "Language" "1049"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\cclaunch\shell" "" ""
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\cclaunch\shell\open" "" ""
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\cclaunch\shell\open\command" "" "$\"$INSTDIR\ccleaner.64exe$\" /%1"
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32" "EnableFileTracing" 0x0
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32" "EnableConsoleTracing" 0x0
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32" "FileTracingMask" 0xffff0000
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32" "ConsoleTracingMask" 0xffff0000
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32" "MaxFileSize" 0x100000
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32" "FileDirectory" 2500770069006e0064006900720025005c00740072006100630069006e0067000000
WriteUninstaller "$INSTDIR\Удалить CCleaner.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$INSTDIR\CCleaner64.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\Удалить CCleaner.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "${PRODUCT_VERSION}"
${Else}
SetOutPath "$INSTDIR"
File /r "D:\CCleaner1\*.*"
SetShellVarContext all
SetRegView 32
WriteRegStr HKEY_CURRENT_USER "Software\Piriform" "" ""
WriteRegStr HKEY_CURRENT_USER "Software\Piriform\CCleaner" "Language" "1049"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\cclaunch\shell" "" ""
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\cclaunch\shell\open" "" ""
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\cclaunch\shell\open\command" "" "$\"$INSTDIR\ccleaner.exe$\" /%1"
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32" "EnableFileTracing" 0x0
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32" "EnableConsoleTracing" 0x0
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32" "FileTracingMask" 0xffff0000
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32" "ConsoleTracingMask" 0xffff0000
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32" "MaxFileSize" 0x100000
WriteRegBin HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32" "FileDirectory" 2500770069006e0064006900720025005c00740072006100630069006e0067000000
WriteUninstaller "$INSTDIR\Удалить CCleaner.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$INSTDIR\CCleaner.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\Удалить CCleaner.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "${PRODUCT_VERSION}"
;;;
;тут пишем все команды при обычной установке
;DetailPrint "Обычная установка"
;;;
${EndIf}
${EndIf}
SectionEnd

Section "-Распаковка портативной версии"
${If} $Radio1 == 1
SetOutPath "$INSTDIR"
File /r "D:\CCleanerPortable\*.*"
SetShellVarContext all
;тут пишем все команды при распаковки портативной версии
MessageBox MB_OK "Портативная версия ${PRODUCT_NAME} ${PRODUCT_VERSION} распакована в текущую папку."
;;;
${EndIf}
SectionEnd

Section "-Ярлыки"
${If} $Check == 1
${If} ${RunningX64}
CreateShortCut "$Desktop\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner64.exe"
${Else}
CreateShortCut "$Desktop\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner.exe"
${EndIf}
${EndIf}
;;;;;;;
${If} $Check1 == 1
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
${If} ${RunningX64}
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner64.exe"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Удалить ${PRODUCT_NAME}.lnk" "$INSTDIR\Удалить CCleaner.exe"
${Else}
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner.exe"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Удалить ${PRODUCT_NAME}.lnk" "$INSTDIR\Удалить CCleaner.exe"
${EndIf}
;;;
DetailPrint "Ярлык в меню Пуск"
;;;
${EndIf}
SectionEnd

Section "-Надстрйока"
${If} $Check3 == 1
SetOutPath "$INSTDIR"
File /r "D:\iNTEGER\*.*"
SetShellVarContext all
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Запустить модуль CCEnhancer.lnk" "$INSTDIR\CCEnhancer.exe"
;;;
${EndIf}
SectionEnd

Section "-Корзина"
${If} $Check2 == 1
${If} ${RunningX64}
SetRegView 64
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell" "" ""
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner" "" ""
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner\command" "" "$INSTDIR\ccleaner64.exe /AUTO"
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner..." "" ""
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner...\command" "" "$INSTDIR\ccleaner64.exe"
${Else}
SetRegView 32
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner..." "CCRBType" 0x2
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner...\command" "" "$INSTDIR\CCleaner.exe"
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner" "CCRBType" 0x1
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner\command" "" "$INSTDIR\CCleaner.exe /AUTO"
${EndIf}
;;;
${EndIf}
SectionEnd

Section Uninstall
RMDir /r "$INSTDIR"
SetShellVarContext all
RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}"
Delete "$Desktop\${PRODUCT_NAME}.lnk"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Удалить ${PRODUCT_NAME}.lnk"
DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner..."
DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner...\command"
DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner"
DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner\command"
SetRegView 64
DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner..."
DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner...\command"
DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner"
DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner\command"
DeleteRegKey HKCR "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner"
DeleteRegKey HKCR "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner\command"
DeleteRegKey HKCR "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner..."
DeleteRegKey HKCR "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner...\command"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKCU "Software\Piriform"
DeleteRegKey HKLM "SOFTWARE\Classes\cclaunch"
DeleteRegKey HKLM "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32"
MessageBox MB_OK "Удаление ${PRODUCT_NAME} ${PRODUCT_VERSION} успешно завершено!"
SetAutoClose true
SectionEnd

Function .onInstSuccess
ExecShell open "http://forum.oszone.net"
FunctionEnd




Давним методом тыка выяснил что если убрать !define MUI_HEADERIMAGE то BRANDING "RePack by D!akov кликабельный а если прописать то становится про как ссылка и не кликабельный...

КАК ИСПРАВИТЬ???

kotkovets
23-12-2011, 00:10
плагин Linker.dll для NSIS есть »
Устаревший плагин, берите этот плагин: http://nsis.sourceforge.net/BrandingURL_plug-in
И ничего редактировать не нужно редактором ресурсов, работает с оригинальным ресурсом

diakov
23-12-2011, 00:19
Давним методом тыка выяснил что если убрать !define MUI_HEADERIMAGE то BRANDING "RePack by D!akov кликабельный а если прописать то становится про как ссылка и не кликабельный...

все настроил и цвет подобрал) теперь все гуд) Завтра уже возьмусь за запуск с финиш страницы

kotkovets
23-12-2011, 00:39
diakov, Уберите эту хрень в функции .OnInit
${GetOptions} "$CMDLINE" "/inst" $R0
${If} ${RunningX64}
SetShellVarContext all
CreateShortCut "$Desktop\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner64.exe"
${Else}
SetShellVarContext all
CreateShortCut "$Desktop\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner.exe"
${EndIf}
SetShellVarContext all
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
${If} ${RunningX64}
SetShellVarContext all
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner64.exe"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Удалить ${PRODUCT_NAME}.lnk" "$INSTDIR\Удалить CCleaner.exe"
${Else}
SetShellVarContext all
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner.exe"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Удалить ${PRODUCT_NAME}.lnk" "$INSTDIR\Удалить CCleaner.exe"
${EndIf}
SetOutPath "$INSTDIR"
File /r "D:\iNTEGER\*.*"
SetShellVarContext all
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Запустить модуль CCEnhancer.lnk" "$INSTDIR\CCEnhancer.exe"
${If} ${RunningX64}
SetShellVarContext all
SetRegView 64
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell" "" ""
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner" "" ""
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner\command" "" "$INSTDIR\ccleaner64.exe /AUTO"
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner..." "" ""
WriteRegStr HKEY_CLASSES_ROOT "CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner...\command" "" "$INSTDIR\ccleaner64.exe"
${Else}
SetShellVarContext all
SetRegView 32
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner..." "CCRBType" 0x2
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Открыть CCleaner...\command" "" "$INSTDIR\CCleaner.exe"
WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner" "CCRBType" 0x1
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shell\Запустить CCleaner\command" "" "$INSTDIR\CCleaner.exe /AUTO"
${EndIf}
MessageBox MB_OK "${PRODUCT_NAME} ${PRODUCT_VERSION} установлена в тихом режыме."
Условия только задавайте, по переменным - остальное все выполнится из секций. Если запуск производить с ключом /S,
то будет обычная тихая установка.
Тобишь можно принудительно устанавливать значения переменных, а от значений будет выполняться, та или иная задача:
StrCpy $Radio 1 - установка обычная
StrCpy $Radio1 1 - портативная установка
StrCpy $Check2 1 - контекст корзины
StrCpy $Check 1 - ярлык на рабочем столе
StrCpy $Check1 1 - меню пуск
Естественно, если задать нулевые значения, то выполняться не будет, то или иное действие

diakov
23-12-2011, 01:18
kotkovets, Я так делал но инстальник почемуто не писал ключи :(

Ок попробую еще раз и отпишусь)




© OSzone.net 2001-2012