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

mshak
17-05-2010, 12:17
с предыдущим вопросом разобрался:

; в месте перехода
StrCpy $R9 -1
Call RelGotoPage

; за секцией установки
Function RelGotoPage ; Функция для произвольного перехода по страницам
; Вызывать след образом:
; StrCpy $R9 X ; где Х - относительный номер страницы (например: -1 переход на одну назад, 1 - на одну вперед)
; Call RelGotoPage
IntCmp $R9 0 0 Move Move
StrCmp $R9 "X" 0 Move
StrCpy $R9 "120"
Move:
SendMessage $HWNDPARENT "0x408" "$R9" ""
FunctionEnd

... но возник новый вопрос:
когда возвращаюсь снова в секцию установки (например когда во втором файле 2.msi была ошибка, и он не установился) то сначала запускается установка 3го файла 3.msi и одновременно начинается установка 1-го. Собственно вопрос? как сделать так, что бы не продолжалась "старая" установка, т.е. обнулить состояние данной секции?

hb860
18-05-2010, 10:32
Потому что скрипт выполняет процесс установки уже. Вам надо писать свою страницу и функцию установки. MUI_PAGE_INSTALLFILES (или как там её) вам уже не подходит в вашем случае

mshak
18-05-2010, 23:47
спасибо, но данное сделал след образом: после установки есть страница которая проверяет как прошла установка... если неверна, то возвращает на страницу с серийниками, если все ок. то к странице финиша

hb860
24-05-2010, 11:41
Создание своих собственных ключей для инсталлятора NSIS (http://winreview.ru/NSIS/472/Sozdanie-svoego-installyatora-na-NSIS.-Realizatciya-dopolnitelnih-klyuchej-komandnoj-stroki)
Это для тех, кому мало /S, /D и /NCRC

SamLab
11-06-2010, 00:54
Как прописать System32 чтобы NSIS сам определял битность куда распаковаться в system32 или в syswow64
стоит $SYSDIR он лепит в system32 всегда без руздумий даже на 64-битной системе
прописать $WINDIR\SysWOW64\ нельзя т.к. на 32-битной системе такой папки нет
нужно чтобы NSIS на 32-битах в System32 распаковывал, а эта же установка на 64-битах в SysWOW64

kotkovets
11-06-2010, 01:44
Как прописать System32 чтобы NSIS сам определял битность куда распаковаться в system32 или в syswow64 »
Попробуйте так :


Name "GetVersion Example"
OutFile "GetVersion.exe"
ShowInstDetails show
Page InstFiles

Section
GetVersion::WindowsPlatformArchitecture
Pop $R9
StrCmp $R9 32 Not
MessageBox MB_OK "WindowsPlatformArchitecture: $R9"
SetOutPath "$WINDIR\SysWOW64"
Not:
StrCmp $R9 64 Note
MessageBox MB_OK "WindowsPlatformArchitecture: $R9"
SetOutPath "$SYSDIR"
Note:
SectionEnd


Плагин (http://nsis.sourceforge.net/GetVersion_(Windows)_plug-in#Download)

SamLab
11-06-2010, 21:18
kotkovets, Систему определяет правильно, но распаковывает сразу в обе папки все равно - взял руками закинул файл в system32 и он автоматом скопировался в wow - значит сама винда копирует

kotkovets
11-06-2010, 23:02
И удаляются одинаковые файлы с двух папок одновременно?

SamLab
12-06-2010, 01:07
kotkovets, Да! Как зеркала друг друга папки System32 и WOW64!

kotkovets
12-06-2010, 02:26
По скрипту в 32-битной системе папка C:\Windows\SysWOW64 не создаётся.
В 64-битной системе ,предполагаю, это системные переменные , которые не рекомендуется изменять - глюки возможны.
Возможно Винда копирует файлы для совместимости 32-разрядных и 64-разрядных приложений.

SamLab
12-06-2010, 09:42
kotkovets, Странная совместимость - когда я указываю 64-битным файлам в System32 а в WOW 32-битные, то получается какие в последнюю очередь копируются - те и помещаются в обе папки

wander
17-06-2010, 00:06
Доброй ночи, друзья :)

Вопрос у меня вот назрел. Хочется сделать установщик-обновлятор. Чтобы он, если вдруг уже программа установлена, находил все экземпляры запущенной более старой версии программы, закрывал их и корректно ставил новую версию в тот же каталог с обновлением существующих файлов.

Я сделал пока через FindWindow/SendMessage в цикле. Мне бы хотело более человеческий способ. Есть такой?

И вот еще вопрос, как сделать, чтобы установщик в конце замочил сам себя? Деинсталлятор же умеет так.

hb860
17-06-2010, 00:31
wander, рулите процессами через http://nsis.sourceforge.net/Processes_plug-in
Как понять, "закончил себя"? У вас он не закрывается? Может, конкретный код глянем?
Только не в приват :)

wander
17-06-2010, 10:13
Только не в приват
И в мыслях не было!
Как понять, "закончил себя"? У вас он не закрывается? Может, конкретный код глянем?
Не закончил, а замочил. То есть удалился с диска.
http://nsis.sourceforge.net/Processes_plug-in
Спасибо :)

veln
17-06-2010, 13:25
Возник вопрос
Помогите с решением

ОS - win7

необходимо скопировать файл по адресу:
c:\Users\Default\AppData\Roaming\

если использовать $APPDATA копится в c:\Users\user\AppData\Roaming\

SetShellVarContext all
$APPDATA копится в c:\Users\All Users\AppData\Roaming\


есть ли возможность закинуть файл в дефолтовый профиль используя предопределенные переменные

Lisabon
17-06-2010, 13:50
Здравствуйте! У меня небольшая просьба помочь мне со скриптами на NSIS, если есть возможность и время, то можно ли мне помочь разобраться с ними, я был бы весьма признателен...

Есть весьма интересный пример RememberComponents.rar (прикрепил к сообщению), я хотел бы этот скрипт адаптировать в мой скрипт Nero_v10.0.rar (прикрепил к сообщению)... Собственно мне не понятно как адаптировать часть скрипта RememberComponents, Function .onInit и Function un.onInit , применение этих функций нарушает мои SectionGroup, тобишь все компоненты на странице MUI_PAGE_COMPONENTS идут в один ряд, без использования SectionGroup.

Вот скрины:

до
http://s42.radikal.ru/i095/1005/d6/b0894321f1a4t.jpg (http://radikal.ru/F/s42.radikal.ru/i095/1005/d6/b0894321f1a4.jpg.html)

после
http://s60.radikal.ru/i168/1005/d5/9b5d68a23c6ct.jpg (http://radikal.ru/F/s60.radikal.ru/i168/1005/d5/9b5d68a23c6c.jpg.html)

Если вам не сложно объясните как и что подправить или добавить в мой скрипт Nero_v10.0.rar... можно примером.... или правкой моего скрипта Nero_v10.0.rar. Сам скрипт писался только для собственных нужд, так как другие сборки в сети меня не устраивают...

Заранее благодарен...

hb860
17-06-2010, 16:42
wander,
Не закончил, а замочил. То есть удалился с диска. »
http://nsis.sourceforge.net/SelfDel_plug-in

veln, вам поможет чтение реестра, ветка HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList, значение Default.
Вот вам небольшой примерчик. Работает только в Windows Vista и Windows 7, для ХР путь на винте, как вы понимаете, другой.
outfile "hello world.exe"
section
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" "Default"
ExpandEnvStrings $0 $0
StrCpy $0 "$0\AppData\Roaming\"
MessageBox MB_OK $0
sectionEnd

Cyber-pilot
22-06-2010, 19:35
У меня проблема с установкой программы в операционной системе win7.
Запускаю установку, указывают путь для установки по умолчанию в "Program Files\Название программы". Для работы программы требуется ключ, копирую его в каталог с программой. Все отлично работает.
Проблема возникает когда захожу под другим пользователем. Установленная программа говорит, что не зарегистрированна. Странно! Проверяю есть ли ключ в каталоге с программой. Его там нет.
И так для остальных пользователей. Например меняешь какой-нибудь файл под одним пользователем, под другим пользователем он остается прежним.
С чем это связано? Как это можно исправить? Может быть в инсталяторе как-то указать, что каталог с программой общий для всех пользователей?

Cyber-pilot
24-06-2010, 10:42
Разобрался. Надо было дать полный доступ для всех пользователей на каталог, куда устанавливается программа.
Для этого надо было установить AccessControl plug-in http://nsis.sourceforge.net/AccessControl_plug-in
и написать:
AccessControl::GrantOnFile \
"$INSTDIR" "(S-1-1-0)" "FullAccess"

WolfSoul
30-06-2010, 00:13
Привет всем, доброго Вам времени суток.
Пожалуйста помогите с кодом...
Создал отдельную страницу
;--------------------------------


Var Dialog
Var CheckBox
Var GroupBox

Function fnCustomInit
nsDialogs::Create 1018
Pop $Dialog

${NSD_CreateGroupBox} 0 5% 100% 50% "Ярлыки программы:"
Pop $GroupBox

${NSD_CreateCheckBox} 10 18u 70% 10% "В меню Пуск"
Pop $CheckBox

${NSD_CreateCheckBox} 10 30u 70% 10% "На рабочем столе"
Pop $CheckBox

${NSD_CreateCheckBox} 10 42u 70% 10% "В панели быстрого запуска"
Pop $CheckBox

${NSD_CreateGroupBox} 0 -25% 100% 25% "Запуск программы вместе с системой:"
Pop $GroupBox

${NSD_CreateCheckBox} 10 -22u 70% 10% "Добавить программу в автозапуск"
Pop $CheckBox

nsDialogs::Show
FunctionEnd

Function fnCustomDestroy
${NSD_GetState} $CheckBox $R0
FunctionEnd

;--------------------------------
А как сделать что-бы она работала не как не разберусь.
;--------------------------------
Пока могу сделать только так...
;--------------------------------
; Пользователь сам выбирает, какие ярлыки ему нужны, по умолчанию все включено

SectionGroup /e "Ярлыки программы" SecShortcut
Section "Ярлык в меню Пуск" MenuProgramsShortcut
SectionIn 1 ; означает, что секция включена, а если не вставлять эту строку, тогда секция отключена
CreateDirectory "$SMPROGRAMS\AudioGrabber"
CreateShortCut "$SMPROGRAMS\AudioGrabber\Help.lnk" "$INSTDIR\AudioGrabber.hlp" "" "" "" "" "" "Помощь!!!"
CreateShortCut "$SMPROGRAMS\AudioGrabber\AudioGrabber.lnk" "$INSTDIR\AudioGrabber.exe" "" "" "" "" "" "AudioGrabber 1.83.0.1"
CreateShortCut "$SMPROGRAMS\AudioGrabber\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" "" "" "" "" "" "Посетить сайт автора -> AudioGrabber"
CreateShortCut "$SMPROGRAMS\AudioGrabber\Uninstall.lnk" "$INSTDIR\Uninstall.exe" "" "" "" "" "" "Удалить -> AudioGrabber с Вашей системы"
SectionEnd
;--------------------------------
Section "Ярлык на рабочем столе" SecDesctopShortcut
SectionIn 1 ; означает, что секция включена, а если не вставлять эту строку, тогда секция отключена
CreateShortCut "$DESKTOP\AudioGrabber.lnk" "$INSTDIR\AudioGrabber.exe" "" "" "" "" "" "AudioGrabber 1.83.0.1"
SectionEnd
;--------------------------------
;
Section "Ярлык в панели быстрого запуска" SecQlaunchShortcut
SectionIn 1 ; означает, что секция включена, а если не вставлять эту строку, тогда секция отключена
CreateShortCut "$QUICKLAUNCH\AudioGrabber.lnk" "$INSTDIR\AudioGrabber.exe" "" "" "" "" "" "AudioGrabber 1.83.0.1"
SectionEnd
SectionGroupEnd
;--------------------------------
;
SectionGroup "Автозапуск" SecArlaunch
Section "Добавить программу в автозапуск" SecArlaunchShortcut
SectionIn 1 ; означает, что секция включена, а если не вставлять эту строку, тогда секция отключена
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Run" "AudioGrabber" "$INSTDIR\AudioGrabber.exe"
SectionEnd
SectionGroupEnd

;--------------------------------
Так вот как сделать что-бы моя страница заработала(реагировала на действия пользователя)




© OSzone.net 2001-2012