|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив].: NSIS - все вопросы :. |
|
[архив].: NSIS - все вопросы :.
|
Ветеран Сообщения: 1216 |
|
|
Отправлено: 23:35, 17-06-2006 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Опять по той же задаче пишу... Пытался разобраться, но из-за плохих знаний ничего не получается.
Смотрел пример, но как реализовать до конца не понял Вот такое пытался писать.. Section SetOutPath "$INSTDIR" ;нужен поиск по файлу 1.cfg на предмет наличия записи "aaaaaaaaaaaaaa.*=$INSTDIR\xxx\yyy". Если запись есть, ничего делать не нужно. StrCpy $0 0 loop: ReadINIStr $1 "$INSTDIR\1.cfg" "main" "aaaaaaaaaaaaaa" StrCmp $1 "" Done StrCmp $1 "xxx\yyy" 0 +3 StrCpy $0 1 Goto Done IntOp $0 $0 + 1 Goto Loop Done: StrCmp $0 1 Next ; если записи нет, то нужно ее вставить "aaaaaaaaaaaaaa.*=$INSTDIR\xxx\yyy", где * - порядковый номер. GetFullPathName $6 .. ${FileReadFromEnd} "$INSTDIR\1.cfg" "Find" ;читает строку за строкой? и записывает в $9? WriteINIStr $INSTDIR\1.cfg main "aaaaaaaaaaaaaa.$3" "$6\xxx\yyy" Next: SectionEnd Function Find StrCpy $2 $9 14 ;Эту строку нужно обрезать до 14 первых символов (SimObjectPaths) ${if} $2 == "aaaaaaaaaaaaaa" Intop $3 $3 + 1 ${endif} FunctionEnd |
Отправлено: 12:00, 13-01-2012 | #2211 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать romgun, я же говорил в цикле читаем файл,в функции макроса значения совпадений уничтожается, поэтому для подсчёта объявляем свою переменную:
Пример файла: Пример: Section StrCpy $int 0 ${FileReadFromEnd} "$InstDir\file.cfg" "Read" ${if} ${Errors} MessageBox mb_ok "файл не найден" ${Else} ${For} $0 1 $int ReadIniStr $1 "$InstDir\file.cfg" "dir" "Dirpatch_$0" MessageBox mb_ok "$1" ${Next} ${EndIf} SectionEnd Function Read StrCpy $R0 $9 9 ${If} $R0 == "Dirpatch_" InTop $int $int + 1 MessageBox mb_ok "$R0 - $int" ${EndIf} Push $0 FunctionEnd |
------- Последний раз редактировалось kotkovets, 15-01-2012 в 23:34. Отправлено: 20:15, 13-01-2012 | #2212 |
Пользователь Сообщения: 58
|
Профиль | Отправить PM | Цитировать делаю свою страничку UNPAGE_CONFIRM для деинсталятора
подскажите как получить папку из какой был запущен деинсталятор? $EXEDIR и $EXEPATH не подходят в стандартной страничке куда бы я не скопировал файл деиняталятора тот путь и указывается например C:\Program Files\uninstal\ C:\Documents and Settings\Admin\Рабочий стол\ используя же $EXEDIR я всегда получаю : C:\WINDOWS\Temp\~nsu.tmp up $OUTDIR - решает мою проблему |
Отправлено: 15:48, 17-01-2012 | #2213 |
Пользователь Сообщения: 58
|
Профиль | Отправить PM | Цитировать возвращаясь к старому вопросу
можно ли изменить внешний вид PAGE_INSTFILES точнее UNPAGE_INSTFILES. но я думаю нет особых различий. пробовал вызывать функции SHOW PRE что-то типа nsDialogs::Create 1018 Pop $5 ${NSD_CreateLabel} 120u 10u 195u 40u "dialog create function" Pop $R4 SetCtlColors $R4 "" "FFFFE1" nsDialogs::Show но это не дает желаемого эффекта Я получаю пустую страничку с одним лейблом без остальных контролов. как можно (если можно) добавить собственные контролы? И при этом что бы остались старые контролы и выполнялся код в секциях. (те что бы прогрес бар также адекватно на это реагировал) |
Отправлено: 17:12, 17-01-2012 | #2214 |
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать текущая папка деинсталлятора - $INSTDIR
Деинсталлятор имеет два процесса - $EXEDIR, для того, чтобы удалить деинсталлятор. |
------- Отправлено: 17:20, 17-01-2012 | #2215 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Есть текстовый файл (list.txt). В нем находиться список файлов(а точнее пути к ним), которые требуется удалить. Задача стоит в том, что бы написать код деинсталятора, короый удаляет эти файлы.
Я пробовал так: ${LineSum} "$INSTDIR\list.txt" $NumOfFiles ;узнаем кол-во файлов, и значение заносим в $NumOfFiles ${For} $CurrentFileNumber 1 $NumOfFiles ${LineRead} "$INSTDIR\list.txt" $CurrentFileNumber $CurrentFileName ; в цикле for читаем построчно файл "list.txt" и значение (путь к файлу) заносим в $CurrentFileName Delete "$CurrentFileName" ;удаляем файл по его пути. ${Next} |
Последний раз редактировалось Paval, 17-01-2012 в 18:58. Отправлено: 18:14, 17-01-2012 | #2216 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Надеюсь на помощь...
Структура нужна примерно такая: проверка1---проверка2---если нет данных, то запись---копирование новых файлов Пытался делать кусками, но теперь проблема объединить. С логикой беда - если значение не найдено, из цикла выползти не могу (разве что через ${LoopUntil} - см. в первом куске) 1 этап Проверка была ли уже установка. Желательно двумя способами - по cfg и по xml , которые могут быть либо в папке юзера, либо в папке All users Проблема с циклом и переходом к анализу xml? 2. Если в cfg не найдено, запись туда. Слишком, по-моему, путано написано 3. если в xml не найдено, запись туда 4. Переименование и копирование папок. Здесь в принципе все ясно |
Последний раз редактировалось romgun, 19-01-2012 в 09:48. Отправлено: 14:14, 18-01-2012 | #2217 |
Ветеран Сообщения: 5821
|
Профиль | Сайт | Отправить PM | Цитировать Вопросик по переменным системной папки винды
$SYSDIR в системе x86 и x64 ведет в System32 поэтому для помещения файлов в x64 системе в папку SysWOW64 приходится указывать $WINDIR\SysWOW64 может есть способ для оригинального установщика, дабы при определении системы как x86 файлы в System32 кидались, а в x64 в SysWOW64? пока вот так делаю: ${If} ${SectionIsSelected} ${secX86install} ; SetOutPath "$WINDIR\SysWOW64" File "C:\x86.url" ${Else} ${EndIf} ${If} $R1 == "64" ; SetOutPath "$WINDIR\System32\" File "C:\x64.url" ${Else} ${EndIf} но так в системе x86 файлы будут в SysWOW64 вместо System32 кидаться... |
------- Отправлено: 14:49, 18-01-2012 | #2218 |
Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать SamLab
Подобный вопрос уже проскальзывал, нужно просто проверять версию системы( х86 или х64 ) и в зависимости от результата выбирать ту или иную папку. |
------- Отправлено: 15:04, 18-01-2012 | #2219 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Есть каталог. В нем подкаталоги. Некоторые из них пустые. Как их удалить (только пустые)?
|
Отправлено: 15:17, 18-01-2012 | #2220 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Мультимедиа - WinAmp .:[ обсуждение всех версий ]:. | ssaram | Программное обеспечение Windows | 406 | 12-02-2022 19:45 | |
WinstyleMonitor .:[все вопросы]:. | Mr dUSHA | Проект WinStyle | 331 | 12-02-2014 13:15 | |
Delphi - Delphi .: [все вопросы] :. | Serega | Программирование и базы данных | 94 | 04-05-2013 18:45 | |
Доступ - Никак не удаляются файлы (AVI и все остальные форматы) .:[все вопросы]:. | Microsoft Windows 2000/XP | 105 | 30-06-2010 11:58 | ||
Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 |
|