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

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" »
Куда писать этот код? Нужно чтобы выполнялась задача после установки инсталлятора.
Может есть и другие варианты? Например, во время установки инсталлятора или до?

a8sent
13-09-2010, 20:30
Всем привет!!! Прошу помочь в написании формы ввода логина и пароля, с дальнейшей записью их в файл!

kotkovets
13-09-2010, 20:36
Куда писать этот код? »
пост 764 (http://forum.oszone.net/post-1493623-764.html)......:biggrin:
Функция будет выполнена после завершения инсталляции:
Function .onInstSuccess
ExecWait "Путь к файлу\decall.bat"
FunctionEnd

Прошу помочь в написании формы ввода логина и пароля, с дальнейшей записью их в файл »
И ,что же у вас там не получается, по конкретней!

a8sent
14-09-2010, 10:12
В общем необходимо сделать установочный файл миранды для организации, с возможностью пользователям вводить логин и пароль для авторизации, который в дальнейшем будет записываться в зашифрованном виде в файл autoexec.ini, который в свою очередь при первом запуске миранды, заносит данные содержащиеся в нём в профиль пользователя.

kotkovets
14-09-2010, 11:55
будет записываться в зашифрованном виде в файл »
А что, когда, например на своей странице, вводим пароль и логин,
данные считывается из памяти и записываются в назначенные переменные уже не катит? :o
при первом запуске миранды, заносит данные содержащиеся в нём в профиль пользователя »
Интересно, если миранда шифрует данные пользователя то,
Каким образом вы зашифруете с помощью NSIS данные, чтобы миранда "поняла" параметры?
Разработчики миранды вам алгоритм шифрования и дешифрования дадут?:o

Lisabon
14-09-2010, 16:00
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"'
Все консольные окна скрыты и ожидание отработки до сл. команды.

Lisabon
14-09-2010, 17:39
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"

Lisabon
14-09-2010, 18:49
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" »

Попробовал, но результат один и тот же - не отрабатывает программа... Точнее после запуска скомпилированного инсталлятора, в процессах висит сам инсталлятор и не завершается, приходится лезть в диспетчер задач, для убивания инсталлятора.

Если идей других нет, то ладно, фиг с ним отображением... как говорится - нет, так нет...

MKN
15-09-2010, 12:05
Есть файлы драйверов - 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 нужен под эту архитектуру.

MKN
16-09-2010, 09:18
kotkovets,
Благодарю, но как быть с установкой на х64 без сторонних утилит ?

kotkovets
16-09-2010, 11:31
MKN
Точно не знаю, но думаю без сторонних утилит не обойтись.
Я использую dpinst, меньше заморочек... с драйверами.




© OSzone.net 2001-2012