Показать полную графическую версию : Модифицированный SFX модуль 7-Zip'а для установок
Oleg_Sch
спасибо за оперативный ответ, вопросы возникли по моей невнимательности и невнимательности еще одного человека.
только что вышел 7zip 4.32 скачать (http://citkit.dl.sourceforge.net/sourceforge/sevenzip/7z432.exe)
только что вышел 7zip 4.32
Зачем качать? Windows 95 support was improved
ixt-folk
15-12-2005, 00:41
Oleg_Sch
Пожалуйста ткните меня в то место где написано или подскажите как можно заставить установку распаковывать файлы не создавая папки в тойже папке где и установочный файл :) Если это ещё не реализованно то хотелосьбы добавить это метод извлечения. Спасибо.
Oleg_Sch
15-12-2005, 01:02
ixt-folk
Тыкаю :)
InstallPath="."
Oleg_Sch
Как продвигаются дела с "графической оболочкой" вашего варианта модуля?
Не порадуете ли нас новогодним подарком? Если нет, то когда ждать (хотя бы ориентировочно)?
С уважением...
Oleg_Sch
15-12-2005, 10:48
gora
Последние две недели - никак. Загруз полный :(. На основную работу времени не хватает.
К Новому году, наверное, нет :( Но я буду стараться ;). Сроки говорить не хочу, чтобы не обнадеживать напрасно.
Oleg_Sch
Приведу мой конфиг файл:
;!@Install@!UTF-8!
RunProgram="menu.exe"
InstallPath="%TEMP%"
ExtractTitle="Распаковка..."
GUIMode="1"
GUIFlags="22"
ExtractDialogText="Программа установки драйверов для моего компьютера";
Shortcut="D, {%%T\\menu.exe}, {}, {}, {}, {Установка драйверов}"
;!@InstallEnd@!
Программа распаковывается, запускается файл menu.exe, а вот значок на столе не появляется. Программа устанавливает драйвера и выходит с перезагрузкой компьютера. Если из файла menu.exe выйти обыкновенно, то значок появляется. Можно ли это исправить, что бы значок появлялся до запуска RunProgram=, или не ждал его завершения?
Oleg_Sch
04-01-2006, 18:31
gora
Хотя это частный (даже очень частный) случай, подумаю, что можно сделать... Отпишусь завтра-послезавтра...
Oleg_Sch
06-01-2006, 02:54
gora
Все, что вы отписали - правильный алгоритм работы модуля (он ждет ЗАВЕРШЕНИЯ работы программы, чтобы ПОТОМ выполнить все остальные действия, как то создание ярлыков, удаление чего-то после установки), и для вашего случая (исключение из правил) не надо править его (модуль).
Достаточно menu.exe запускать через какую-нибудь программу-утилиту, которая не ожидает завершения работы вашей программы и выходит. Это может быть виндовозный start или мой hidcon с ключом /nw (он запускает любые приложения, но окна скрывает только в консольных). Саму утилиту можно удалить с помощью Delete в конфигурационном файле, а в случае с виндовозным start так и вообще не надо ничего ни добавлять в архив, ни удалять после.
Попробуйте
;!@Install@!UTF-8!
RunProgram="start menu.exe"
InstallPath="%TEMP%"
ExtractTitle="Распаковка..."
GUIMode="1"
GUIFlags="22"
ExtractDialogText="Программа установки драйверов для моего компьютера";
Shortcut="D, {%%T\\menu.exe}, {}, {}, {}, {Установка драйверов}"
;!@InstallEnd@!
Я думаю, должно сработать.
Vovanchik
06-01-2006, 03:30
Oleg_Sch
может конечно сумбурно, но попробую обьяснить ситуевины в которых глюки ловил.
короче все дело в активной и текущей директории.
кому как больше нравиться называть.
насколько я понял в ридми - текущей директорией является директория разпаковки.
ну так вот, начну по порядку.
первый случай
среда WinPE на основе WinXP SP2 rus на виртуальной машине, темповая директория b:\
распаковывается без указания директории распаковки, т.е. в темповую папку
sfx запакованый upx минимального размера.
после разпаковки Drweb не может найти базы лежащие с ним в одной и тойже папке.
аналогично и в реальной среде WinXP SP2 rus, темповая директория C:\windows\temp
после прописывания директории распаковки в виде %temp%\\drweb все заработало в обоих средах
Второй случай
Среды теже
Пути распаковки прописаны как %temp%\\Everest
delete=%temp%\\Everest
эверест распаковывается,нормально запускается, но по выходу все файлы остаются на местах
при отсутвии указания директории распаковки - эффект тотже - приложение закрывается, темповая папка со всем содержимым в темповой директори остается жива.
Третий случай
Среды теже
приложение r-studio
При обоих методах остается один файл в папке.
четвертый случай.
в рабочей среде моей отказался выполняться dx update последний вседофенишный.
при разборке скрипта и отслеживании переменной %CD% при его выполнении текущей директорией оказалась c:\windows вместо темповой папки в темповой директории.
указание конкретной директории распаковки эффекта не оказало.
переменная %~p0 показала реальное текущее значение.
насколько я понимаю - в первом случае некорректно передалась приложению текущая директория
можно вручную при выполнении приложения добавить пермаментно папку распаковки в %path% но эт чета не совсем красивое решение.
возможно ли это делать прогрммо по умолчанию - если это уже сделано - тогда вопрос снимается.
второй и третий случаи - файлы еще открыты в момент того как папка должна удалиться.
возможно ли тут принудительное закрытие дескрипторов файлов с их последующим удалением? по типу того как работает Unlocker (http://ccollomb.free.fr/unlocker/)
возможно просто стоит сделать небольшую отсрочку для корректного закрытия файлов системой и только после этого их удаление.
четвертый случай - воще полная мистика.
отнесу его к текущему состоянию разбитости моей системы.
но на всякий случай рассказал, может чем помог.
все вышесказанное прошу расценивать как посильную помошь в разватии столь важного и интересного проекта.
никаких предьяв автору, тока пожелания сделать лучше.
за сим разрешите откланяться.
Oleg_Sch
06-01-2006, 08:40
Vovanchik
Будем ловить (глюки). Все довольно подробно, спасибо.
В PM (или аська в профиле) пока только конфиги 7z и переменные окружения. Попробую сэмулировать ситуевины...
2 Oleg_Sch
Не проходит этот вариант.
RunProgram="start menu.exe"
дает результат "Error during execution "start menu.exe". He удается найти указанный файл."
Я уже писал, что не специалист я ко командной строке. Запустить, как либо, этот start, мне не удалось. Если можно по подробней, почему у меня не работает этот start?
Oleg_Sch
08-01-2006, 17:04
Каюсь. Был не прав. start - это из командного интерпретатора, поэтому должно быть RunProgram="cmd /c start menu.exe" (но мелькнет на доли секунды консольное окно).
Или второй вариант про который я писал - с hidcon.exe: RunProgram="hidcon.exe /nw menu.exe"
Сам hidcon.exe можете взять здесь http://unattended.solta.ru/exectools.7z
Vovanchik
11-01-2006, 02:14
кстати я тут применил этом модуль в довольно интересном плане...
при создании winpe
просто используя его свойство передавать параметры внутрь архива можно спокойно интегрировать эти архивы в оболочку и прописывать файловые ассоциации
т.е. архиву можно передать параметром например имя файла и он распакуется во временную папку - передаст эти параметры екзешнику внутри себя, екзешник выполниться, откроет тот файл что ему передали и по окончанию работы (при закрытии екзешника) sfx модуль автоматически затрет директорию на рамдиске (опционально).
при этом вот какие приемущества мы получаем:
выигрыш места на диске - раз
простота интеграции - два
никакой заморочки со скриптовым копированием файлов на рамдиск - три
никаких заморочек с переписываем путей всех создаваемых (read - write) файлов на рамдиск - четыре
проги быстрей загружаются при небольшом уровне компрессии за счет более мелкого размера файла - пять.
никакий принудительной очистки рамдиска - шесть
Vovanchikникакий принудительной очистки рамдиска - шесть
гм ... а вопросы второго и третьего случая из предыдущего поста уже решены ? ;)
в команде start /wait r-studio.exe никакого wait не происходит т.к. r-studio 32 битное приложение с графическим интерфейсом. Про это в хелпе к start сказано.
Vovanchik
24-01-2006, 22:42
a1ex
там нужно rs_un.bin в rs_un.exe переименовать и его запускать...
но это частный случай ... тоже самое с эверестом
Oleg_Sch
25-01-2006, 02:28
a1exгм ... а вопросы второго и третьего случая из предыдущего поста уже решены ?
Как раз второй и третий случай решены. Первый был списан на вспышки на солнце и фазу луны - не смогли добиться его повторения ни я ни Vovanchik (он к тому моменту переставил систему, насколько я помню). Четвертым пока не занимался.
Я неделю назад тоже все переустановил и потерял историю аськи и переписку с Vovanchik, отвечу по памяти, если что Vovanchik поправит.
2. Everest заработал нормально при указании ключа /WAIT
RunProgram="Everest.exe /WAIT"
3. Для р-студио Vovanchik уже написал. Я так понял, что кроме этого rs_un.bin в WinXP больше ничего не надо (по крайней мере у меня работало только с этим одним файлом переименованным в rs_un.exe, и SFX модуль ждал окончания его работы).
Все это не баги SFX модуля, а особенности выполняемых программ. Что Everest, что r-studio при своем запуске исполняют какие-то другие файлы и выходят. Модуль считает, что работа закончена, и затирает папку. Так r-studio.exe запускает rs_un.bin, а everest.exe - everest.bin
a1exв команде start /wait r-studio.exe никакого wait не происходит т.к. r-studio 32 битное приложение с графическим интерфейсом. Про это в хелпе к start сказано.
Это никак не связано с типом приложения (графическое-консольное), а с особенностями написаными выше. Не знаю, что там в хелпе к start, но попробуйте просто
start /WAIT notepad
start БУДЕТ ждать завершения notepad'а, хотя он и графический
Oleg_Sch
Это никак не связано с типом приложения (графическое-консольное), а с особенностями написаными выше. Не знаю, что там в хелпе к start,
хелп читал только русский, может это трудности с переводом ... но для себя я сделал вывод, что /wait гарантировано работает с консольным приложением. К sfx в этом плане претензий нет :). Ранее в подобныхых случаях я тупо в цикле через sleep ждал окончания процессов.
Vovanchikтам нужно rs_un.bin в rs_un.exe переименовать и его запускать...
ради интереса запустил rs_an , тоже вроде как работает ;). Интересно, в каких случаях рстудио запускает его?
p.s. спасибо Олегу за экономию места, а Вованчику за идею использовать это в PE :)
Oleg_Sch
25-01-2006, 15:21
a1exради интереса запустил rs_an , тоже вроде как работает . Интересно, в каких случаях рстудио запускает его?
Мне кажется, что rs_an и rs_un это соответственно ANSI и Unicode версии. Если так, то rs_un не будет работать в Win9x (нет врожденной поддержки Unicode), но rs_an будет работать на NT-платформе (где ANSI приложения с некоторыми оговорками поддерживаются полноценно, а Unicode - вообще врожденно).
Скорее всего r-studio.exe проверяет платформу и запускает соответствующий файл.
хелп читал только русский, может это трудности с переводом ... но для себя я сделал вывод, что /wait гарантировано работает с консольным приложением.
Неверно. Здесь САМОЕ ГЛАВНОЕ - дочерний процесс. start (и SFX модуль тоже) ждет окончания ОСНОВНОГО процесса, но игнорирует дочерние.
Продолжу свой пример. Создадим aa.cmd (гарантировано консольное приложение)
start notepad
exit
Т.е. в нем НЕТ ОЖИДАНИЯ окончания выполнения notepad
А теперь запустим:
start /WAIT aa.cmd
И что же мы видим ? Все выполнено. aa.cmd (основной процесс) завершил свое работу, "start /WAIT aa.cmd" тоже. Но notepad (дочерний процесс) НИКУДА не делся, он по прежнему на рабочем столе! Тоже самое происходит и в SFX модуле - основной процесс (например, r-studio.exe) завершил свою работу и SFX модуль пытается удалить файлы, но ДОЧЕРНИЙ процесс rs_un.bin свою работу продолжает, и заблокирован. Результат - SFX модуль не может его удалить.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.