Показать полную графическую версию : [архив].: NSIS - все вопросы :.
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} случайно попало в скрипт, удалил.
На днях выложу инсталлятор для общего блага в соответствующей теме..
Работает безукоризненно.
Доброго времени суток! Проблема в следующем: создается 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"
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
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC