Показать полную графическую версию : [архив].: NSIS - все вопросы :.
Caymanroc
12-09-2010, 11:29
Прошу прощения за задержку с ответом, т.к. был в командировке.
Попробуйте так:
»
Первый вариант - инсталлятор вообще не пытается установить программу. После распаковки InstallShieldProgramm.exe инталлятор переходит к выполнению, а затем сразу же перескакивает на следующий шаг, т.е. по всей видимости ExecWait вообще не осуществляется.
Второй вариант:
ExecWait "msiexec.exe /i $\"$INSTDIR\installer\install.msi$\" /qb INSTALLDIR=$INSTDIR TRANSFORMS=$\"INSTDIR\installer\install.mst$\""
Вылетает аналогичная ошибка, что и с самого начала. Мне кажется, что проблема в том, что msi не может обработать INSTALLDIR=$INSTDIR, т.к. повотрюсь, что при другом значении INSTALLDIR установка завершается успешно.
Если как-то поможет, то скрин ошибки:
http://s59.radikal.ru/i165/1009/be/af600ee5c3de.jpg (http://www.radikal.ru)
P.S. Пока решение - просто запускать ExecWait вообще без параметров, где пользователь вводит папку, аналогичную NSIS, но, как понимаете, это не очень хорошо, и все же хотелось бы отыскать решение.
kotkovets
12-09-2010, 12:04
Если как-то поможет, то скрин ошибки »
это не ошибка, неправильная передача параметров
выложите, свой InstallShield ,гляну что и как .... :)
a вы задали в своем скрипте, значение переменной $INSTDIR ?
Caymanroc
12-09-2010, 12:23
это не ошибка, неправильная передача параметров
выложите, свой InstallShield ,гляну что и как .... »
Отправил в пм. Спасибо за помощь!
a вы задали в своем скрипте, значение переменной $INSTDIR ? »
Да, InstallDir "$PROGRAMFILES\Lotus Forms\Viewer\3.5\"
kotkovets
12-09-2010, 13:00
InstallDir "$PROGRAMFILES\Lotus Forms\Viewer\3.5\" »
Уберите в конце левый слеш \
Вобщем так:
1. Распаковываем InstallShield по этому примеру (forum.oszone.net/thread-49157.html)
2. Извлекаем файлы: .msi и 1049.MST , остальное мусор
3. Переименовываем msi файл в Install.msi
4 "Ложим" файлы Install.msi и 1049.MST рядом со скриптом.
Пишем:
InstallDir "$PROGRAMFILES\My Program"
OutFile "OutFile.exe"
Section
SetOutPath $TEMP
File "1049.MST"
File "install.msi"
ExecWait 'msiexec.exe /i "$TEMP\install.msi" /qn INSTALLDIR="$INSTDIR\folder" TRANSFORMS="$TEMP\1049.MST"'
Delete "$TEMP\1049.MST"
Delete "$TEMP\install.msi"
SectionEnd
У нас прекрасная тихая установка.
Caymanroc
12-09-2010, 13:25
Уберите в конце левый слеш \
Вобщем так: »
В общем, все заработало. А дело, как обычно было в мелочах - в одинарных кавычках в ExecWait, и в кавычках на INSTALLDIR="$INSTDIR\folder". :)
Спасибо большое за помощь!
kotkovets
12-09-2010, 13:49
А дело, как обычно было в мелочах »
мелочи решают всё :) ...
asetin_9207
13-09-2010, 17:38
ExecWait "Путь к файлу\decall.bat" »
Куда писать этот код? Нужно чтобы выполнялась задача после установки инсталлятора.
Может есть и другие варианты? Например, во время установки инсталлятора или до?
Всем привет!!! Прошу помочь в написании формы ввода логина и пароля, с дальнейшей записью их в файл!
kotkovets
13-09-2010, 20:36
Куда писать этот код? »
пост 764 (http://forum.oszone.net/post-1493623-764.html)......:biggrin:
Функция будет выполнена после завершения инсталляции:
Function .onInstSuccess
ExecWait "Путь к файлу\decall.bat"
FunctionEnd
Прошу помочь в написании формы ввода логина и пароля, с дальнейшей записью их в файл »
И ,что же у вас там не получается, по конкретней!
В общем необходимо сделать установочный файл миранды для организации, с возможностью пользователям вводить логин и пароль для авторизации, который в дальнейшем будет записываться в зашифрованном виде в файл autoexec.ini, который в свою очередь при первом запуске миранды, заносит данные содержащиеся в нём в профиль пользователя.
kotkovets
14-09-2010, 11:55
будет записываться в зашифрованном виде в файл »
А что, когда, например на своей странице, вводим пароль и логин,
данные считывается из памяти и записываются в назначенные переменные уже не катит? :o
при первом запуске миранды, заносит данные содержащиеся в нём в профиль пользователя »
Интересно, если миранда шифрует данные пользователя то,
Каким образом вы зашифруете с помощью NSIS данные, чтобы миранда "поняла" параметры?
Разработчики миранды вам алгоритм шифрования и дешифрования дадут?:o
kotkovets, может быть подскажете, возможно ли встроенными средствами NSIS, или при помощи плагинов, скрыть отображение (отрабатывание) запущенной консольной программы... Если не возможно, то какими средствами можно сие организовать, и если можно приведите пример, как это будет выглядеть в NSIS.
kotkovets
14-09-2010, 16:43
скрыть отображение (отрабатывание) запущенной консольной программы »
ExecCmd (http://nsis.sourceforge.net/ExecCmd_plug-in)
Пример:
ExecCmd::exec 'DOS.bat'
или так:
ExecCmd::exec 'cmd /c "DOS.bat"'
Все консольные окна скрыты и ожидание отработки до сл. команды.
kotkovets,
что-то не получается, точнее не отрабатывает программа... Может у меня ошибка?
Вот код:
Section Install
HideWindow
SetOutPath "$TEMP\USB_Safely_Remove\"
File /r "USB_Safely_Remove\*"
ExecCmd::exec '"$TEMP\USB_Safely_Remove\USB_Safely_Remove.exe" -flash /all'
ExecCmd::exec '"$TEMP\USB_Safely_Remove\usr.exe" stop -n "USB Device"'
SetOutPath "$TEMP"
RMDir /r /rebootok "$TEMP\USB_Safely_Remove"
Quit
SectionEnd
До этого было вот так:
Section Install
HideWindow
SetOutPath "$TEMP\USB_Safely_Remove\"
File /r "USB_Safely_Remove\*"
ExecWait '"$TEMP\USB_Safely_Remove\USB_Safely_Remove.exe" -flash /all'
ExecWait '"$TEMP\USB_Safely_Remove\usr.exe" stop -n "USB Device"'
SetOutPath "$TEMP"
RMDir /r /rebootok "$TEMP\USB_Safely_Remove"
Quit
SectionEnd
С этим кодом работает
kotkovets
14-09-2010, 17:52
что-то не получается, точнее не отрабатывает программа »
Попробуйте так:
ExecCmd::exec '"$TEMP\USB_Safely_Remove\USB_Safely_Remove.exe -flash /all"'
или так:
ExecCmd::exec "$TEMP\USB_Safely_Remove\USB_Safely_Remove.exe -flash /all"
kotkovets,
Попробуйте так:
Код:
ExecCmd::exec '"$TEMP\USB_Safely_Remove\USB_Safely_Remove.exe -flash /all"'
или так:
Код:
ExecCmd::exec "$TEMP\USB_Safely_Remove\USB_Safely_Remove.exe -flash /all" »
Попробовал, но результат один и тот же - не отрабатывает программа... Точнее после запуска скомпилированного инсталлятора, в процессах висит сам инсталлятор и не завершается, приходится лезть в диспетчер задач, для убивания инсталлятора.
Если идей других нет, то ладно, фиг с ним отображением... как говорится - нет, так нет...
Есть файлы драйверов - cdrbsdrv.sys и cdrbsdrv_x64.sys (CD-ROM Filter Driver for Windows2000/xp).
Необходимо установливать их в ОСх32 или х64, как драйверы. В документации ничего не нашёл относительно sys файлов, всё про exe...
Подскажите пожалуйста, как реализовать мою задачу ?
kotkovets
15-09-2010, 12:43
Необходимо установливать их в ОСх32 или х64, как драйверы »
Есть плагин
InstDrv (http://nsis.sourceforge.net/InstDrv_plug-in) 100% не даю, что сработает,
под х64 - по моему не работает.
Установка по inf файлу драйвера, 100% результата не гарантирую:
ExecWait "rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 C:\Script.inf"
где:
InstallHinfSection - имя вызываемой функции (точка входа);
DefaultInstall - первый параметр для вызываемой функции, означает имя выполняемой секции в INF-скрипте;
132 - второй параметр для вызываемой функции, флаг для обработки скрипта;
C:\Script.inf - третий параметр для вызываемой функции, полный путь к файлу скрипта.Обратите внимание, требуется именно полный путь, так как простое указание имени файла подразумевает расположение файла скрипта в системной директории Windows. Это же примечание в равной мере относится и к интерпретатору AdvancedINF.
Есть утилитка Dpinst, установка по inf файлу:
ExecWait 'dpinst.exe /path "Путь к папке с драйверами" /lm /sa /sh /sw'
х64 - dpinst.exe нужен под эту архитектуру.
kotkovets,
Благодарю, но как быть с установкой на х64 без сторонних утилит ?
kotkovets
16-09-2010, 11:31
MKN
Точно не знаю, но думаю без сторонних утилит не обойтись.
Я использую dpinst, меньше заморочек... с драйверами.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC