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

zmeykas
09-03-2011, 16:40
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\MyProg.lnk" $INSTDIR\MyProg.exe
Ссылка на файл создается отлично, но параметр "Рабочая папка" для ярлыка устанавливается из пути "$SMPROGRAMS\$StartMenuGroup\". Как это изменить? Для моей программы обязательно необходимо, чтоб рабочая папка была "$INSTDIR", да и по логике вещей это куда правильней.

------------------------
Извиняюсь за беспокойство, оказалось просто SetOutPath надо на "$INSTDIR" установить.

wolkow70
10-03-2011, 06:51
Ребята, разбираюсь с регистрацией и разрегистрацией DLL при удалении, подскажите пожалуйста конкретное значение таких макросов:

!insertmacro InstallLib REGDLL NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR
!insertmacro InstallLib REGDLL NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR

и соответственно:

!insertmacro UninstallLib REGDLL NOTSHARED NOREMOVE $INSTDIR\test.dll
!insertmacro UninstallLib REGDLL NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll
!insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll

kotkovets
10-03-2011, 14:16
NOREMOVE
· библиотеку нельзя удалить. Используется для общих или важных системных файлов, таких как Visual Basic/C ++/MFC runtimes.
REBOOT_PROTECTED
· Удаляет библиотеку при перезагрузке, когда она использутся программой (требуется для системных файлов).
· Удаляет библиотеку, если файл не защищен Windows File Protection (для ХР)
NOREBOOT_PROTECTED
· Предупреждает пользователя, когда библиотека используется.
· Удаляет библиотеку, если файл не защищен Windows File Protection.
REBOOT_NOTPROTECTED
· Удаляет библиотеку при перезагрузке (требуется для системных файлов).
· Удаляет библиотеку без проверки Windows File Protection. (для ХР)
NOREBOOT_NOTPROTECTED
· Предупреждает пользователя, когда библиотека используется.
· Удаляет библиотеку без проверки Windows File Protection. (для ХР)
NOTSHARED -библиотека не общая, удаляется сразу
SHARED -библиотека общедоступна и будет удалена, если счетчик обращений равен 0
т.ь есть при каждой установке библиотеки счетчик обращений увеличивается на единицу,
при удалении уменьшается на единицу.

wolkow70
13-03-2011, 15:10
Собираю инсталлятор, не отрабатывает комманда в секции деинсталляции:

RMDir /r "$INSTDIR"

хотя все файлы из папки удаляются без проблем.

Вариант RMDir /REBOOTOK "$INSTDIR" работает. Но ведь нет никаких занятых файлов.
Реестр тоже чистый. Не подскажите в чем может быть дело?

kotkovets
13-03-2011, 16:14
wolkow70,
Откуда деинсталлятор запускается? Деинсталятор помещает в $INSTDIR - текущий путь, откуда запущен деинсталлятор. Так что, сейчас проверил - все работает.
Проблема может еще быть в проводнике - не выгружена из буфера какая-нибудь библиотека, используемая ранее. Это все равно, что пытаться удалить текущую открытую папку. Попробуйте перезагрузить оболочку.

wolkow70
13-03-2011, 17:48
Деинсталятор запускается из $INSTDIR. Если какие нибудь библиотеки используются, то они не удаляются из папки, а у меня все файлы удаляются. Папка The Bat! остается совершенно пустой, но не удаляется. Пока сделал вариант RMDir /REBOOTOK "$INSTDIR". Работает, но папка удаляется после перезагрузки.
Вот скрипт прикрепил, если, что...

kotkovets
13-03-2011, 21:11
wolkow70,
и правильно, что не удаляет! Я же писал:
Деинсталятор помещает в $INSTDIR - текущий путь, откуда запущен деинсталлятор »
SetOutPath "$INSTDIR" - совершенно не нужно в деинсталляторе. (Указывает на текущую директорию - примерно тоже самое, что вы открыли папку проводником и ее же пытаетесь удалить)
Достаточно: RMdir /r "$INSTDIR" без всяких Delete...
И если вы делаете ассоциации в скрипте, то для обновления кеша иконок следует прописать макрос в секции:
${RefreshShellIcons}

wolkow70
14-03-2011, 13:33
kotkovets,

SetOutPath "$INSTDIR" удалил из секции деинсталляции. Все стало нормально удалятся без перезагрузки.
${RefreshShellIcons} случайно попало в скрипт, удалил.
На днях выложу инсталлятор для общего блага в соответствующей теме..
Работает безукоризненно.

Sauron3
14-03-2011, 15:08
Доброго времени суток! Проблема в следующем: создается NSISый инсталлятор , необходимо чтобы через меню пуск можно было по ярлыку открыть папку в INSTDIR. Т.е. если мне необходмо в пуске сделать ссылку на exe-шный файл я прописываю следующее:
CreateDirectory "$SMPROGRAMS\Документация"
CreateShortCut "$SMPROGRAMS\Документация\Руководство пользователя Word 2003.lnk" "$INSTDIR\doc\manual.doc"
Как сделать что бы открывалась отдельно взятая папка, а не файл?
Заранее спасибо!

kotkovets
14-03-2011, 16:42
открыть папку в $INSTDIR »
CreateShortCut "$SMPROGRAMS\Документация\Руководство пользователя Word 2003.lnk" "$INSTDIR\doc"

Sauron3
15-03-2011, 09:11
CreateShortCut "$SMPROGRAMS\Документация\Руководство пользователя Word 2003.lnk" "$INSTDIR\doc" »
При такой записи, при попытке открыть папку пишет что не найден ярлык

kotkovets
15-03-2011, 12:50
При такой записи, при попытке открыть папку пишет что не найден ярлык »
Это как понять? и кто говорит?
все работает, создается ярлык, кликаешь ярлык - открывается папка
OutFile File.exe

Section ""
CreateShortCut "$DESKTOP\NSIS_DOCS.lnk" "${NSISDIR}\docs"
;или открыть папку
ExecShell open "${NSISDIR}\docs"
SectionEnd

Sauron3
16-03-2011, 14:44
Спасибо! Все получилось!

wolkow70
22-03-2011, 11:05
Товарищи, подскажите пожалуйста как к следующей строке приклеить свою иконку Core.ico (находится в одной директории с файлом CoreAVCDecoder.ax), а то встроенная в него иконка не радует глаз.

CreateShortCut "$SMPROGRAMS\CoreCodec\CoreAVC Configure.lnk" rundll32.exe "CoreAVCDecoder.ax,Configure" "$INSTDIR\CoreAVC Professional Edition\CoreAVCDecoder.ax"

kotkovets
22-03-2011, 12:29
CreateShortCut "$SMPROGRAMS\My Program.lnk" "$INSTDIR\My Program.exe" \
"some command line parameters" "$INSTDIR\My Program.exe" "2" "SW_SHOWNORMAL" \
"ALT|CONTROL|SHIFT|F5" "description"
CreateShortCut "имя ярлыка" "ссылка на файл" "параметры запуска, ключи" "файл - откуда брать иконку" "индекс иконки" "тип запуска (скрытно, на весь экран)" "горячая клавиша" "описание ярлыка"
1 Параметры которые не нужны пишем пустые кавычки ""
2 Индекс иконки, считается не от цифры и названия иконки в файле, а от единицы .
Как то так :

CreateShortCut "$DESKTOP\shell.lnk" "$WINDIR\explorer.exe" "" "$SYSDIR\shell32.dll" "4" "" "" "Вид ярлыка - папочка )))"

wolkow70
23-03-2011, 09:21
Товарищи никому не доводилось делать инсталлятор на VLC media player?
Скачал с ихнего сайта скрипт. Там по умолчанию выбрана ассоциация с типами файлов. Вот, ломаю голову как отключить ассоциации по умолчанию, что бы чекбоксы были пустые.
Пробовал в секции:
SectionGroup "File type associations" SEC06
SectionGroup "Audio Files"
!insertmacro MacroAudioExtensions RegisterExtensionSection
SectionGroupEnd
SectionGroup "Video Files"
!insertmacro MacroVideoExtensions RegisterExtensionSection
SectionGroupEnd
SectionGroup "Other"
!insertmacro MacroOtherExtensions RegisterExtensionSection
SectionGroupEnd
SectionGroupEnd

ставить /0 - не помогает.

kotkovets
23-03-2011, 09:42
ставить /0 - не помогает »
так не нолик надо писать, а букву o - причем английскую

wolkow70
23-03-2011, 10:24
так не нолик надо писать, а букву o - причем английскую »

SectionGroup /o "File type associations" SEC06
SectionGroup /o "Audio Files"
!insertmacro MacroAudioExtensions RegisterExtensionSection
SectionGroupEnd
SectionGroup /o "Video Files"
!insertmacro MacroVideoExtensions RegisterExtensionSection
SectionGroupEnd
SectionGroup /o "Other"
!insertmacro MacroOtherExtensions RegisterExtensionSection
SectionGroupEnd
SectionGroupEnd


Не помогает.
Выходит так:

kotkovets
23-03-2011, 10:44
А кто в группе ставит /o в справке такого нет, в макросе нужно писать, скрипт дурацкий и устарелый, проще новый написать, чем копаться..
!macro RegisterExtensionSection EXT
Section /o ${EXT}
SectionIn 1 3
Push $R0
StrCpy $R0 ${EXT}
Call RegisterExtension
Pop $R0
SectionEnd
!macroend

wolkow70
23-03-2011, 10:58
!macro RegisterExtensionSection EXT
Section /o ${EXT}
SectionIn 1 3
Push $R0
StrCpy $R0 ${EXT}
Call RegisterExtension
Pop $R0
SectionEnd
!macroend »

Да, так сработало. Спасибо. А скрипт официальный, хоть и старый с сайта.




© OSzone.net 2001-2012