[архив].: NSIS - все вопросы :.

Ответить
 • Просмотры: 53
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Цитата kotkovets:



то ставите себе,

к примеру x32 и параллельно x64 - появится меню выбора меню загрузки ОС.
[архив].: NSIS - все вопросы :.




Поставил себе XPX64 Edition. Для эксперементов с инсталляторами ее хватит?

Сразу возникли вопросы:

Если я инициализирую папку программы:



Var SysDrive

Function .onInit

${If} ${RunningX64}

StrCpy $INSTDIR "$SysDrive\$PROGRAMFILES64\CCleaner"

${Else}

StrCpy $INSTDIR "$SysDrive\$PROGRAMFILES\CCleaner"

${EndIf}

StrCpy $SysDrive $WINDIR 2

FunctionEnd



то строка

InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" не нужна или она просто не будет выполняться в этом случае?

Еще у меня после снятия снимков реестра получилается такая конструкция

:



Код:

Код: Выделить всё

${If} ${RunningX64}
WriteRegStr HKLM "SOFTWARE\Classes\cclaunch" "" "URL: CCleaner Protocol"
WriteRegStr HKLM "SOFTWARE\Classes\cclaunch" "URL Protocol" ""
WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell" "" ""
WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell\open" "" ""
WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell\open\command" "" "$\"$INSTDIR\CCleaner.exe$\" /%1"
;
WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch" "" "URL: CCleaner Protocol"
WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch" "URL Protocol" ""
WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch\shell" "" ""
WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch\shell\open" "" ""
WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch\shell\open\command" "" "$\"$INSTDIR\CCleaner.exe$\" /%1"
;
WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch" "" "URL: CCleaner Protocol"
WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch" "URL Protocol" ""
WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch\shell" "" ""
WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch\shell\open" "" ""
WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch\shell\open\command" "" "$\"$INSTDIR\CCleaner.exe$\" /%1"
${Else} 
WriteRegStr HKLM "SOFTWARE\Classes\cclaunch" "" "URL: CCleaner Protocol"
WriteRegStr HKLM "SOFTWARE\Classes\cclaunch" "URL Protocol" ""
WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell" "" ""
WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell\open" "" ""
WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell\open\command" "" "$\"$INSTDIR\ccleaner.exe$\" /%1"
${EndIf}

Это правильно, или по другому надо делать? Мне просто один раз разобраться нужно с X64.
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Цитата wolkow70:



Var SysDrive

Function .onInit

${If} ${RunningX64}

StrCpy $INSTDIR "$SysDrive\$PROGRAMFILES64\CCleaner"

${Else}

StrCpy $INSTDIR "$SysDrive\$PROGRAMFILES\CCleaner"

${EndIf}

StrCpy $SysDrive $WINDIR 2

FunctionEnd
[архив].: NSIS - все вопросы :.




Можеш ставить $PROGRAMFILES64 потому как и для х86 и для х64 єто C:\Program Files, а вот уже в 64разрядной системе констатация $PROGRAMFILES и $PROGRAMFILES32 представляют папку C:\Program Files (x86).



А в реестре



так





Код:

Код: Выделить всё

${If} ${RunningX64}
 SetShellVarContext all
   SetRegView 64
;;;;;;;;;;ключи для х64
${Else} 
SetShellVarContext all
SetRegView 32
;;;;;;;;;ключи для х86
${EndIf}

И не забудь подключить !include "x64.nsh"

тоесть тебе надо добавить SetRegView 64 или SetRegView 32
Аватара пользователя
Alexey_KF

Re: [архив].: NSIS - все вопросы :.

Сообщение Alexey_KF »

Цитата diakov:



Можеш ставить $PROGRAMFILES64 потому как и для х86 и для х64 єто C:\Program Files, а вот уже в 64разрядной системе констатация $PROGRAMFILES и $PROGRAMFILES32 представляют папку C:\Program Files (x86).
[архив].: NSIS - все вопросы :.




То есть, ты хочешь сказать, что для х86 $PROGRAMFILES64=$PROGRAMFILES?

Может это на практике и будет так интерпретировано, но все таки это не "комильфо".

Если соблюдать все тонкости, то в данном случае $INSTDIR отличается в зависимости от разрядности, тем более эта переменная используется по ходу всего скрипта, поэтому во избежание каких-либо накладок, лучше объявить ее по разному.

Еще я заметил, что в X64 распаковываются оба экзешника, и ccleaner.exe берет на себя часть функций, что следует из комманды cclaunch\shell\open\command" "" "$\"$INSTDIR\ccleaner.exe$\" /%1", в то время, как основным исполняемым файлом является CCleaner64.exe.

Я посмотрел твой скрипт, не могу понять, что это за ключ HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32"? Я у себя такого ключа не нашел.




Цитата diakov:



${If} ${RunningX64}

SetShellVarContext all

SetRegView 64

;;;;;;;;;;ключи для х64

${Else}

SetShellVarContext all

SetRegView 32

;;;;;;;;;ключи для х86

${EndIf}
[архив].: NSIS - все вопросы :.




Это понятно, мне не понятно какие из приведенных выше ключей предназначены для X64.
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

то по моему ключ по приоритету выполнения...дело в том что я ставил клинер на х86 и сканировал ключи, а потом ставил на х64 и сканировал ключи и соотвественно прописывал их в разные секции...
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

Цитата diakov:



то по моему ключ по приоритету выполнения...дело в том что я ставил клинер на х86 и сканировал ключи, а потом ставил на х64 и сканировал ключи и соотвественно прописывал их в разные секции...
[архив].: NSIS - все вопросы :.




Я тоже ставил на разные оси и сравнивал ключи.

На X86 только:



WriteRegStr HKLM "SOFTWARE\Classes\cclaunch" "" "URL: CCleaner Protocol"

WriteRegStr HKLM "SOFTWARE\Classes\cclaunch" "URL Protocol" ""

WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell" "" ""

WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell\open" "" ""

WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell\open\command" "" "$\"$INSTDIR\ccleaner.exe$\" /%1"



На X64 все это:



WriteRegStr HKLM "SOFTWARE\Classes\cclaunch" "" "URL: CCleaner Protocol"

WriteRegStr HKLM "SOFTWARE\Classes\cclaunch" "URL Protocol" ""

WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell" "" ""

WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell\open" "" ""

WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell\open\command" "" "$\"$INSTDIR\CCleaner.exe$\" /%1"

;

WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch" "" "URL: CCleaner Protocol"

WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch" "URL Protocol" ""

WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch\shell" "" ""

WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch\shell\open" "" ""

WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch\shell\open\command" "" "$\"$INSTDIR\CCleaner.exe$\" /%1"

;

WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch" "" "URL: CCleaner Protocol"

WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch" "URL Protocol" ""

WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch\shell" "" ""

WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch\shell\open" "" ""

WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch\shell\open\command" "" "$\"$INSTDIR\CCleaner.exe$\" /%1"
Аватара пользователя
tisole

Re: [архив].: NSIS - все вопросы :.

Сообщение tisole »

Всем здравствуйте!

Возникла следующая проблема с Caption деинсталлятора. В зависимости от того, с каким ключом вызывается деинсталлятор, он либо деинсталлирует программу либо изменяет её настройки. Соответственно хотелось бы менять заголовок (caption) окон в зависимости от того, какие функции осуществляются деинсталлятором. Понятно, что выбор заголовка происходит только в момент запуска, а не во время компиляции.



Есть вариант делать это с помощью

SendMessage $HWNDPARENT ${WM_SETTEXT} 0 "STR:$(CaptionModify)" для каждого окна.

Тогда у меня возникает проблема со стандартной страницей MUI_UNPAGE_INSTFILES. При запуске этой страницы я посылаю указанное сообщение, устанавливается нужный мне заголовок. После выполнения действий по изменению/деинсталляции, окно автоматически не закрывается, то есть SetAutoClose = false, и заголовок меняется на первоначальный, указанный начале кода. Не могу понять, по какому событию мне послать новое сообщение, чтобы вернуть прежний, нужный мне заголовок.

Возможно, кто-то сможет мне помочьИзображение
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

А я использовал Regshot, мож потому...



kotkovets подскажи как сделать что бы иконка проги отображалась в панели управление программы?

где то видел статью но теперь не могу найти
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

Цитата wolkow70:



StrCpy $INSTDIR "$SysDrive\$PROGRAMFILES64\CCleaner"
[архив].: NSIS - все вопросы :.




Бред!!! получится, что так:

$INSTDIR = С:\C:\Program Files\CCleaner

InstallDir
помещает свое значение в переменную $INSTDIR


Цитата wolkow70:



Это понятно, мне не понятно какие из приведенных выше ключей предназначены для X64.
[архив].: NSIS - все вопросы :.




Реестр 64-разрядных версий Windows подразделяется на 32- и 64-разрядные разделы. Большинство 32-разрядных разделов имеют те же имена, что и их аналоги в 64-разрядном разделе, и наоборот. По умолчанию редактор реестра 64-разрядных версий Windows отображает 32-разрядные разделы в разделе HKEY_LOCAL_MACHINE\Software\WOW6432Node

В комплекте поставки Windows XP 64-bit Edition имеются две версии Редактора реестра:

одна, запускаемая по умолчанию, демонстрирует только 64-битный раздел реестра Windows XP,

другая предназначена для редактирования 32-разрядного раздела.

Естественно 64-битную программу система "заставляет" использовать по умолчанию 64-разрядный реестр

и 32-битные программы использовать по умолчанию 32-разрядный реестр.

установщик NSIS в х64 - это 32-разрядный процесс, а значит по умолчанию вид (SetRegView 32)

Использование (SetRegView 64) позволяет инсталлятору NSIS использовать доступ к 64-разрядному виду реестра.


Цитата diakov:



как сделать что бы иконка проги отображалась в панели управление программы?
[архив].: NSIS - все вопросы :.




Смотрите ключи в ветке:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

kotkovets,


Цитата kotkovets:



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
[архив].: NSIS - все вопросы :.






Чето не получается мож что не так вылазить две страницы финиша
Ответить

Вернуться в «Автоматическая установка приложений»