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

MKN
26-11-2010, 16:17
Подскажите пожалуйста, как в NSIS выглядит переменная c:\Documents and Settings\All Users ?
Именно таким образом без "продолжения" пути. (Продолжением пути будет произвольное имя App)

И какая переменная в Windows 7 для С:\Users\Public ?

MKN
26-11-2010, 17:12
Lisabon,
Вот так : $PROFILE\..\All Users\ - работает. Без точек - нет...
Интересно, а для Windows 7 С:\Users\Public - таким же образом делать ?

Lisabon
26-11-2010, 17:31
Интересно, а для Windows 7 С:\Users\Public - таким же образом делать ? »

Может попробовать считать переменную среду %Public% через ReadEnvStr, ну и потом использовать в своих целях. Я не пробовал, но по идее должно помочь.

Name "Example1"
OutFile "example1.exe"

Section ""
ReadEnvStr $0 "COMSPEC"
ReadEnvStr $1 "USERNAME"
ReadEnvStr $2 "HOMEDRIVE"
ReadEnvStr $3 "HOMEPATH"
ReadEnvStr $4 "ALLUSERSPROFILE"
ReadEnvStr $5 "LOGONSERVER"
ReadEnvStr $6 "PUBLIC"

MessageBox MB_OK "COMSPEC: $0 $\r$\n USERNAME: $1 $\r$\n HOMEDRIVE: $2 $\r$\n HOMEPATH: $3 $\r$\n ALLUSERSPROFILE: $4 $\r$\n LOGONSERVER: $5 $\r$\n PUBLIC: $6 $\r$\n"
SectionEnd

kotkovets
26-11-2010, 17:34
SetShellVarContext all
MessageBox MB_OK "$DOCUMENTS"

!include "FileFunc.nsh"
---
SetShellVarContext ALL
${GetParent} "$DOCUMENTS" "$R0"
MessageBox MB_OK "$R0"

kotkovets
26-11-2010, 18:09
Кстати неплохие примеры пишут через WinAPI:
http://nsis.sourceforge.net/Get_the_Special_Folders_Dirs._(System_plugin)

MKN
26-11-2010, 18:11
kotkovets,
А можно для создания вышеискомых переменных, определив системный диск в переменную, подставить эту переменную вместо C:\ ?

kotkovets
26-11-2010, 18:15
MKN можно, но зачем? :o

MKN
26-11-2010, 18:34
После выхода из инсталлятора (его закрытия) необходимо убить процесс и удалить его файл .
Процесс выгружаю так:
Function .onGUIEnd
nsProcess::_FindProcess /NOUNLOAD "APP.exe"
Pop $R0
StrCmp $R0 0 0 +3
nsProcess::_KillProcess /NOUNLOAD "APP.exe"
StrCmp $R0 603 0 +2
FunctionEnd
А вот как удалить ставший не нужным файл APP.exe (из $temp) - не могу придумать. Инсталлятор то уже закрыт...
Что можно сделать ?

kotkovets
26-11-2010, 18:47
Что можно сделать ? »
Попробуй так:
Function .onGUIEnd
nsProcess::_FindProcess /NOUNLOAD "APP.exe"
Pop $R0
StrCmp $R0 0 0 Done
nsProcess::_KillProcess /NOUNLOAD "APP.exe"
Sleep 500 ;пауза на всяк случай 0,5с
Delete /REBOOTOK "$temp\APP.exe"
Done:
FunctionEnd

Krinkels
26-11-2010, 23:50
Друзья, сделал плагин для NSIS с помощю которого можно комфортно использовать unarc.dll в инсталяторе NSIS. В архиве так же присутствует скрипт с примером. nsisarc.dll и unarc.dll нужно закинуть в папку NSIS\Plugins. Это первая версия, по этому прошу не сильно пинать :)
Скрин (http://www.krinkels.ru/_ld/0/16.jpg)
Скачать (http://www.krinkels.ru/load/raznoe/unarc_dll_dlja_nsis/2-1-0-16)

kotkovets
27-11-2010, 00:16
Krinkels A а мануальчик, как использовать то?
nsisarc::ArcExtract "1.arc" "tmp" "" "" ""
И что, можно подставить в пустые кавычки ???

Krinkels
27-11-2010, 00:20
Упс, пардон.
nsisarc::ArcExtract
"1.arc" - Архив. Когда у себя тестил он лежал рядом с инсталятором
"tmp" - Папка куда нужно распаковать архив
"" - Вроде для пароля
"" - Без понятия для чего, нужно у автора спрашивать
"" - Без понятия для чего, нужно у автора спрашивать

kotkovets
27-11-2010, 01:12
Krinkels,
Я думал вы автор, беспарольные архивы распаковывает, как заявлено, а вот с паролем никак!
Уточните у автора параметры все таки!

Krinkels
27-11-2010, 01:40
kotkovets
Попробуй во вторые пустые кавычки вставить пароль, должно помочь

MKN
27-11-2010, 09:53
Подскажите пожалуйста, как решить такую задачу :
Необходимо дождаться появления(создания) file.txt в $TEMP и как только он появится (когда именно - неизвестно), закрыть инсталлятор.

kotkovets
27-11-2010, 13:10
MKN,
А кто будет создавать file.txt в $TEMP ? :)

MKN
27-11-2010, 13:22
А кто будет создавать file.txt в $TEMP ? »
Сторонняя программа, запущенная из скрипта (или сама по себе, извне). А скрипт должен отследить создание этого файла и закрыться.
Полагаю, надо как то организовать цикл проверки существования этого файла... В документации ничего путного по этому поводу не обнаружил...

kotkovets
27-11-2010, 13:28
А проблема, то в чем? как минимум:
ExecWait "процесс.exe" ;команда будет ждать завершения процесса
IfFileExists "$Temp\file.txt" 0 +2 ;будет файлик - будет и выход
Quit

MKN
27-11-2010, 13:35
kotkovets,
Не подходит, первым делом пробовал... И процесс здесь не нужно учитывать. Ориентир - только файл. Может связано с тем что скрипт ещё запускает последовательно несколько программ...

kotkovets
27-11-2010, 13:45
MKN,
Покажь проблемный кусок кода




© OSzone.net 2001-2012