Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
wolkow70
15-04-2013, 13:52
Кто-нибудь может подсказать как при выполнении функции ReplaceLinesInFile по замене текста в файле сделать так, чтобы временный файл создавался не в папке с инсталлятором, а где-нибудь в другом месте?
Вопрос связан с тем, что инсталлятор нужно записать на диск.
Function ReplaceLinesInFile
${LineSum} "$_FindInFile" $_LineNumbers ; Подсчитываем количество строк
strcpy $_CurLineNumber 0
startLineRead:
intop $_CurLineNumber $_CurLineNumber + 1
IntCmp $_CurLineNumber $_LineNumbers 0 0 endFunc ; Если номер текущей строки больше количества строк в файле - поиск завершен
${LineRead} "$_FindInFile" "$_CurLineNumber" $_CurLine ; Читаем строку по номеру текущей строки
${WordFind} '$_CurLine' "$_LineReplace" "E+1{" $R0 ; Ищем в строке нужный текст
StrCmp $R0 "1" startLineRead 0 ; Если в строке присутствует искомый текст, выполняем код ниже
${LineFind} "$_FindInFile" "" "" "Insert_Line" ; Вызываем функцию Insert_Line, которая произведёт замену
goto startLineRead
endFunc:
;
FunctionEnd
Function Insert_Line
StrCmp $R8 "$_CurLineNumber" 0 push
${StrRep} $_CurLine "$_CurLine" "$_LineReplace" "$_LineToInsert"
FileWrite $R4 "$_CurLine"
StrCpy $0 SkipWrite
push:
Push $0
FunctionEnd
Хочу понять, что куда распаковываются компоненты программы, написанной в NSIS. Подскажите, как вытянуть сценарий?
Кто-нибудь может подсказать как при выполнении функции ReplaceLinesInFile по замене текста в файле сделать так, чтобы временный файл создавался не в папке с инсталлятором, а где-нибудь в другом месте? »
Какой временный файл? В данной функции есть только 1 ссылка на файл, это файл, в котором производится замена текста
Вы можете его изменить как вам угодно, вы же обрезали и выкинули кусочек кода, где присваивается переменной путь файла
StrCpy $_FindInFile '$EXEDIR\TEST.txt' ; Заменяем строки в этом файле
StrCpy $_LineReplace 'NSIS' ; Ищем и заменяем ЭТУ фразу
StrCpy $_LineToInsert 'Справочник по NSIS' ; На что будем заменять
Можете сначала скопировать файл в $TEMP, произвести там замену, а потом скопировать файл обратно. Значение переменной поменять легко. Или я не правильно понял суть вопроса? :)
Хочу понять, что куда распаковываются компоненты программы, написанной в NSIS. »
Клац (http://bit.ly/138DQvE)
Подскажите, как вытянуть сценарий? »
Никак.
И прочитайте шапку темы, там ответ кстати дан. И прочитайте справочник по NSIS на русском языке. Всё в шапке.
wolkow70
16-04-2013, 10:24
вы же обрезали и выкинули кусочек кода, где присваивается переменной путь файла »
Не обрезал, просто не вставил, есть такой кусочек:
StrCpy $_FindInFile '$INSTDIR\opera_install_log.xml' ; Заменяем строки в этом файле
StrCpy $_LineReplace 'C:\Program Files\Opera' ; Ищем и заменяем ЭТУ строку
StrCpy $_LineToInsert '$INSTDIR' ; На что будем заменять
Call ReplaceLinesInFile
В процессе замены неоднократно именно в папке с инсталлятором (не в $INSTDIR) создается временный файл. В деталях отображается переименование файла во временный по мере внесения изменений. Вот мне нужно,чтобы он мелькал в другом месте, так как на CD он не сможет создаваться.
здравствуйте,
подскажите, отличаются ли события при нажатии на крестик закрытия и Cancel button?
Я использую пользовательскую функцию CustomAbort и хотел бы при нажатии на кнопку отмены выводить одно сообщение, а при нажатии на крестик другое.
возможно ли это?
.
kotkovets, Здравствуйте. Хочу повторить вопрос, который я задавал раньше... У Вас, как-то, было желание написать библиотеку, чтобы работать в NSIS с окнами приложений. Очень хочется, например, кликать на кнопки формы по координатам мышью... :) Появилось ли что-то подобное где-нибудь, у кого-нибудь?
Всем Привет , кто может помочь мне ? Мне нужен простой пример ассциации файлов , и еще при выборе компонентов мне необходимо чтобы флажок был установлен по умолчанию и его нельзя было бы убрать как в inno setup где флаг установлен как fixed , помогите плиз! Заранее спасибо .
ValerBOSS
08-05-2013, 05:11
Mafioza, про ассоциацию фалов есть раздел в справочнике из первого поста (Создание своего инсталлятора на NSIS. Ассоциации файлов. Макросы)
Чтобы флажок был заблокирован нужно вставить в скецию SectionIn RO, например:
Section "Sec Name" secName
SectionIn RO
SectionEnd
Друзья, подскажите:
Как в поле Show Detalis скрыть отображение распаковки файлов и путь программы? (распаковывается один файл в $Temp, затем удаляется). И напротив, как в это поле вывести выхлоп запуска консольной утилиты, и при этом скрыть консольное окно?
В процессе замены неоднократно именно в папке с инсталлятором (не в $INSTDIR) создается временный файл. В деталях отображается переименование файла во временный по мере внесения изменений. Вот мне нужно,чтобы он мелькал в другом месте, так как на CD он не сможет создаваться. »
Насчет этого не знаю, не замечал
Ну как вариант, можно сделать отдельный EXE чисто с функцией замены строк, копировать его в $TEMP и запускать оттуда
Друзья, подскажите:
Как в поле Show Detalis скрыть отображение распаковки файлов и путь программы? (распаковывается один файл в $Temp, затем удаляется). И напротив, как в это поле вывести выхлоп запуска консольной утилиты, и при этом скрыть консольное окно? »
Дружище, Справочник по NSIS (http://forum.oszone.net/thread-168287.html)
Всем привет , я хочу создать инсталляторм браузера Opera , не могли бы вы мне помочь , я хочу чтобы после установки браузер был назначем по умолчанию и дом, страницей стала страница opera.com , заранее спасибо !
я хочу чтобы после установки браузер был назначем по умолчанию »
Сложно? (http://bit.ly/121njbI)
и дом, страницей стала страница opera.com »
В файле opera6.ini (или operaprefs.ini, не знаю, копайтесь сами), в секции User Prefs присвойте парамметру Home URL адрес сайта
Либо упаковываете изменённый файл конфигурации, либо после распаковки файла, командой WriteINIStr устанавливаем значение параметра, описание команд NSIS есть в Справочнике по NSIS (http://forum.oszone.net/thread-168287.html)
Какое сжатие использовать, чтобы файлы из инсталлятора нельзя было вытащить при помощи 7-zip и прочих архиваторов?
Здравствуйте. Моя трабла такова, хочу сделать установочник в котором хотел бы использовать несколько ключей установки, в частности для добавления в различные директории ярлыки программы, подскажите пожалуйста кто чем может.
wolkow70
19-05-2013, 05:44
Здравствуйте. Моя трабла такова, хочу сделать установочник в котором хотел бы использовать несколько ключей установки, в частности для добавления в различные директории ярлыки программы, подскажите пожалуйста кто чем может. »
например так:
!define PRODUCT_NAME "µTorrent"
!include "FileFunc.nsh"
!include "Sections.nsh"
Var AppExe
Section /o "Добавить ярлык на Рабочий стол" Desktop
SetShellVarContext all
CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\$AppExe"
SectionEnd
Section /o "Добавить ярлык в панель Быстрого запуска" QuickLaunch
CreateShortCut "$QUICKLAUNCH\${PRODUCT_NAME}.lnk" "$INSTDIR\$AppExe"
SectionEnd
Function .onInit
StrCpy $AppExe "uTorrent.exe"
ClearErrors
${GetOptions} $CMDLINE "/T" $0
IfErrors +2
SectionSetFlags ${Desktop} 1
Pop $0
ClearErrors
${GetOptions} $CMDLINE "/Q" $0
IfErrors +2
SectionSetFlags ${QuickLaunch} 1
Pop $0
FunctionEnd
В данном коде при наличии ключа /T будет подключена секция создания ярлыка на рабочем столе , а при наличии /Q в Панели быстрого запуска для файла uTorrent.exe.
NSIS 3.0a0
Скачать : http://nsis.sourceforge.net/Download
Обсуждение : http://forums.winamp.com/showthread.php?t=361808
kotkovets
23-05-2013, 21:26
NSIS 3.0a0 »
неужели разродились...
бегло пробежался, что нового... самые существенные:
---
1) Подержка юникода (я так понял примерно..), т.е не нужно отдельно скачивать юникодную версию - текстовый скрипт может быть в любом юникоде..
деинсталлятор всегда "юникодный" - т.е будет работать от windows 2000 (XP) и выше...
--
2) Поддержка Windows 8 и Windows Server 2012
--
3) Плагины отдельно хранятся в папках:
анси - NSIS\Plugins\x86-ansi
юникодные - NSIS\Plugins\x86-unicode
---
ссылку на скачивание добавил в шапку
Ещё пример для функции CreateWindowEx :
Создаём на странице окно и помещаем в это окно флеш анимацию ( в формате swf )
!include MUI2.nsh
Page custom fnc_Create
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
OutFile "test_play_swf.exe"
Var dlg
Function fnc_Create
nsDialogs::Create 1018
Pop $dlg
System::Call `atl::AtlAxWinInit() i.r0`
System::Call `kernel32::GetModuleHandle(i 0) i.R3`
System::Call 'user32::CreateWindowEx(i 0, t "AtlAxWin", t "{D27CDB6E-AE6D-11cf-96B8-444553540000}", i ${WS_CHILD}|${WS_VISIBLE}, i 15, i 8, i 400, i 40, i $HWNDPARENT, i 0, i R3, i 0) i.R1'
System::Call `atl::AtlAxGetControl(i R1, *i .r1) i .r0`
StrCpy $3 "$EXEDIR\a.swf"
System::Call "$1->22(w r3) i .r2" ; 22 = set_Movie
nsDialogs::Show
FunctionEnd
Section
SectionEnd
AtlAxWinInit - Эта функция инициализирует код размещения элемента управления библиотеки ATL
путем регистрации классов окна "AtlAxWin80" и "AtlAxWinLic80" плюс несколько пользовательских сообщений окна.
(ATL - Active Template Library - Это библиотека классов и шаблонов, предназначенная для разработки собственных компонетов )
classid - при вставке flash это константа и всегда имеет значение clsid: {D27CDB6E-AE6D-11cf-96B8-444553540000},
это значение указывает на элемент ActiveX : \WINDOWS\system32\Macromed\Flash\Flash11e.ocx
AtlAxGetControl - Получает указатель интерфейса IUnknown элемента управления, который хозяйничает в окне.
Вот комплект-пример :
Николай М.
26-05-2013, 04:45
Всем доброго времени суток!
У меня к Вам следующий вопрос - мне нужно при установке программы дописать/вписать свое значение в ключ реестра. Вся проблема в том, что до меня уже может быть несколько записей, и мне нужно определить есть ли запись в ключе реестра. Если запись уже есть, то мне нужно дописать свой путь к программе. Также возникает проблема с анисталом.
Например:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
"AppInit_DLLs"="c:\myapp.dll, c:\123.dll, D:\321.exe, "
или
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Run]
"Test"="c:\123.exe, c:\myapp.dll, D:\321.exe "
Эти две проблемы можно решить?
PS: Заранее благодарю!
"AppInit_DLLs"="c:\myapp.dll, c:\123.dll, D:\321.exe, " »
Вирусы пишем?
Эти две проблемы можно решить? »
Можно решить, если прочитать наш Справочник по NSIS (http://forum.oszone.net/thread-168287.html)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC