Войти

Показать полную графическую версию : Модифицированный SFX модуль 7-Zip'а для установок


Страниц : 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

EgOrus
05-12-2005, 17:23
Oleg_Sch
спасибо за оперативный ответ, вопросы возникли по моей невнимательности и невнимательности еще одного человека.

ANDYru
09-12-2005, 18:59
только что вышел 7zip 4.32 скачать (http://citkit.dl.sourceforge.net/sourceforge/sevenzip/7z432.exe)

Vadikan
10-12-2005, 00:56
только что вышел 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="."

gora
15-12-2005, 09:48
Oleg_Sch
Как продвигаются дела с "графической оболочкой" вашего варианта модуля?
Не порадуете ли нас новогодним подарком? Если нет, то когда ждать (хотя бы ориентировочно)?
С уважением...

Oleg_Sch
15-12-2005, 10:48
gora
Последние две недели - никак. Загруз полный :(. На основную работу времени не хватает.
К Новому году, наверное, нет :( Но я буду стараться ;). Сроки говорить не хочу, чтобы не обнадеживать напрасно.

gora
04-01-2006, 18:20
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 и переменные окружения. Попробую сэмулировать ситуевины...

gora
08-01-2006, 16:50
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) файлов на рамдиск - четыре
проги быстрей загружаются при небольшом уровне компрессии за счет более мелкого размера файла - пять.
никакий принудительной очистки рамдиска - шесть

a1ex
24-01-2006, 22:37
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'а, хотя он и графический

a1ex
25-01-2006, 11:22
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