PDA

Показать полную графическую версию : Модифицированный 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

Nun-Nun
27-10-2011, 20:11
gora,

Отлично! То, что доктор прописал! Всё прошло с первого раза! Огромнейшее спасибо!

P.S. К сожалению, не могу благодарность выразить так, как здесь положено - почему-то периодически исчезает эта функция, вот и сейчас её нет. :(

Iska
28-10-2011, 01:57
P.S. К сожалению, не могу благодарность выразить так, как здесь положено - почему-то периодически исчезает эта функция, вот и сейчас её нет. »
Возможно, превышено суточное ограничение на количество отмечаемых полезных сообщений.

Nun-Nun
29-10-2011, 20:59
Iska,

Не думаю, но кто его знает... В любом случае - принял к сведению. Спасибо.

lioncub
02-11-2011, 14:39
Можно ли с помощью ключей запустить команду перед распаковкой и псоле распаковки?
Т.е. перед распаковкой мне нужно убить процесс (taskill), после распаковки его поднять (run.exe).

Devils0411
16-11-2011, 13:11
Вопрос такого характера, после создания sfx-файла и его запуска, пишет, что файл setup.exe не найден. Версия модуля 1.5.0 Beta, сборка 2100 (28 апреля 2011 г.)

;!@Install@!UTF-8!
;Версия файла
SetEnvironment="Vers= 1.0"
SetEnvironment="Name=Test"
Title="Установка %Name%"
BeginPrompt="Сейчас будет установлен %Name%%Vers%"
;ExtractTitle="Распаковка файлов..."
;ExtractDialogText="Придется подождать..."
;FinishMessage="%Name%%Vers% установлен!"
GUIFlags="2+4+8+16+32+2048+4096"
GUIMode="1"
MiscFlags="4"
AutoInstall0="%%P:hidcon:cmd /c msiexec /i \"%%T\\test_32bit.msi\" /qn"
AutoInstall1="%%P:hidcon:cmd /c msiexec /i \"%%T\\test_64bit.msi\" /qn"
;!@InstallEnd@!

gora
16-11-2011, 13:32
после создания sfx-файла и его запуска, пишет, что файл setup.exe не найден »
При запуске Вашего SFX без ключей -aiX должна выполняться команда RunProgram, но ее у Вас нет. Так же отсутствует параметр InstallPath. В этом случае: будет сделана попытка выполнить файл "setup.exe" (если он имеется в корне архива).Видимо у Вас такого файла нет, что и порождает ошибку.
Для исключения ошибки нужно либо указать InstallPath и прописать в нем путь, либо использовать RunProgram хотя бы с холостой операцией: RunProgram="hidcon:cmd /c Echo"

specialist
16-11-2011, 13:38
файл setup.exe не найден »
а в файле конфигурации он и не заявлен
запускаете собранный exe файл просто двойным кликом или с ключами - ai0 (-ai1) ?
так как строк runprogram и autoinstall для работы из gui интерфейса (запуска двойным кликом) вообще не прописано

Devils0411
16-11-2011, 16:02
gora, Я правильно понял, что если добавить команду RunProgram, то надобность в команде InstallPath отпадает?
Попутный вопрос, чтобы запускать созданный архив без ключей, тогда надо просто задать команду autoinstall?
specialist, нет, данного файла нет вообще и он не заявлен в конфиг файле. Собранный exe просто запускаю без ключей.

gora
16-11-2011, 16:05
Я правильно понял »
Правильно, этого достаточно.
чтобы запускать созданный архив без ключей, тогда надо просто задать команду autoinstall? »
Обычно используют команду RunProgram, т.к., AutoInstall требует нажатия ОК с удерживанием клавиши <Shift>.

Devils0411
16-11-2011, 16:34
Чтоб уж до конца разобраться. По зависимости от платформы.
Приведу пример:

;!@Install@!UTF-8!
;Версия файла
SetEnvironment="Vers= 1.0"
SetEnvironment="Name=Test"
Title="Установка %Name%"
BeginPrompt="Сейчас будет установлен %Name%%Vers%"
;ExtractTitle="Распаковка файлов..."
;ExtractDialogText="Придется подождать..."
;FinishMessage="%Name%%Vers% установлен!"
GUIFlags="2+4+8+16+32+2048+4096"
GUIMode="1"
MiscFlags="4"
RunProgram="%%P:hidcon:cmd /c msiexec /i \"%%T\\test_32bit.msi\" /qn"
RunProgram="%%P:hidcon:cmd /c msiexec /i \"%%T\\test_64bit.msi\" /qn"
;!@InstallEnd@!


Запустив данный sfx-файл, отрабатываются оба RunProgram, т.е. для того чтобы запустить нужную команду в нужной платформе, нужно указывать так?:

;!@Install@!UTF-8!
;Версия файла
SetEnvironment="Vers= 1.0"
SetEnvironment="Name=Test"
Title="Установка %Name%"
BeginPrompt="Сейчас будет установлен %Name%%Vers%"
;ExtractTitle="Распаковка файлов..."
;ExtractDialogText="Придется подождать..."
;FinishMessage="%Name%%Vers% установлен!"
GUIFlags="2+4+8+16+32+2048+4096"
GUIMode="1"
MiscFlags="4"
RunProgram="%%P:hidcon:cmd /c msiexec /i \"%%T\\test_32bit.msi\" /qn"
;!@InstallEnd@!
;!@Install@!UTF-8!:x64!
RunProgram="%%P:hidcon:cmd /c msiexec /i \"%%T\\test_64bit.msi\" /qn"
;!@InstallEnd@:x64!

Тогда смысл переменной %%P?

P.S. Разобрался. Достаточно сделать вот так:

;!@Install@!UTF-8!
;Версия файла
SetEnvironment="Vers= 1.0"
SetEnvironment="Name=Test"
Title="Установка %Name%"
BeginPrompt="Сейчас будет установлен %Name%%Vers%"
;ExtractTitle="Распаковка файлов..."
;ExtractDialogText="Придется подождать..."
;FinishMessage="%Name%%Vers% установлен!"
GUIFlags="2+4+8+16+32+2048+4096"
GUIMode="1"
MiscFlags="4"
RunProgram="x86:hidcon:cmd /c msiexec /i \"%%T\\test_32bit.msi\" /qn"
RunProgram="x64:hidcon:cmd /c msiexec /i \"%%T\\test_64bit.msi\" /qn"
;!@InstallEnd@!

gora
16-11-2011, 18:13
RunProgram="%%P:hidcon:cmd /c msiexec /i \"%%T\\test_32bit.msi\" /qn"
RunProgram="%%P:hidcon:cmd /c msiexec /i \"%%T\\test_64bit.msi\" /qn" »
Начнем постепенно:
1 Запуск msi из модуля не требует использования msiexec, упрощаемRunProgram="%%P:hidcon:cmd /c \"%%T\\test_32bit.msi\" /qn"
RunProgram="%%P:hidcon:cmd /c \"%%T\\test_64bit.msi\" /qn"

2 Для запуска не требуется cmd, ибо это не команды интерпретатора CMD, а если нет окна консоли, то и префикс не нужен, упрощаемRunProgram="%%P:\"%%T\\test_32bit.msi\" /qn"
RunProgram="%%P:\"%%T\\test_64bit.msi\" /qn"

3 Переменная %%T - это текущая папка модуля и указывать ее в команде запуск в данном случае необходимости нет, а, т.к., в именах пробелов нет, то и кавычки не нужны, упрощаемRunProgram="%%P:test_32bit.msi /qn"
RunProgram="%%P:test_64bit.msi /qn"

4 Чтобы каждый из msi отработал только на системе с нужной разрядностью, используем соответствующие префиксы, а не переменную %%P RunProgram="x86:test_32bit.msi /qn"
RunProgram="x64:test_64bit.msi /qn"
Тогда смысл переменной %%P? »
Если Вы можете переименовать свои файлы msi, например, в test_x86bit.msi
test_x64bit.msi
То можно две команды (см. п.4) заменить однойRunProgram="%%P:test_%%Pbit.msi /qn"

wadimus
16-11-2011, 21:29
и еще проще:
RunProgram="test_%%Pbit.msi /qn"

gora
16-11-2011, 21:51
и еще проще: »
Это не всегда одно и тоже, ибо мы не знаем, что там в msi.
Пример:
1 Сделайте два скрипта с именами test_x64.cmd и test_x86.cmd с одинаковым содержанием:@Echo Off
Echo %ProgramFiles%
Pause>Nul

2 Упакуйте их в архив и сделайте SFX с конфигом:;!@Install@!UTF-8!
RunProgram="forcenowait:test_%%P.cmd"
RunProgram="%%P:test_%%P.cmd"
;!@InstallEnd@! Первая строка - Ваш вариант, вторая - мой. На префикс forcenowait здесь можете не обращать внимания и даже удалить, если сомневаетесь, он нужен что бы увидеть два окна консоли сразу.
3 Теперь запустите на x64 системе и сравните результат.

wadimus
17-11-2011, 07:00
gora, хм

test_x64.cmd и test_x86.cmd:
set > %1

конфиг-файл:
;!@Install@!UTF-8!
RunProgram="test_%%P.cmd c:\\test1.txt"
RunProgram="%%P:test_%%P.cmd c:\\test2.txt"
;!@InstallEnd@!

в test1.txt и test2.txt будут разные системные переменные (значения их)?

wadimus
25-11-2011, 19:32
сам же себе отвечу.
системные переменные в нашем случае будут разные!!!
это всё для х64-систем

в первом случае
set > test1.txt
получили:
ProgramFiles=C:\Program Files (x86)
ProgramFiles(x86)=C:\Program Files (x86)
во втором случае:
x64: (вызов такой же команды set > test1.txt)
получили:
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)

что имеем - gora прав!

получается, что командный интерпретатор в х64-системах по-умолчанию запускается 32-х битным!

Уважаемый gora, поясни?

timon45
03-12-2011, 22:09
RunProgram="hidcon:cmd /c copy neon.dll %Programfiles%\AIMP3\Icons"
это команда копирует файл neon.dll в каталог: %Programfiles%\AIMP3\Icons

RunProgram="hidcon:xCopy neon.dll \"%Programfiles%\\AIMP3\\Icons\\\" /e /y"
это команда копирует файл neon.dll с созданием каталога: %Programfiles%\AIMP3\Icons

а как должна выглядеть команда если нужно не скопировать а переместить файл в 1-м и 2-м случае?

gora
03-12-2011, 22:53
; папка назначения уже существует
RunProgram="hidcon:Move neon.dll \"%Programfiles%\\AIMP3\\Icons\" /y"

; папка назначения не существует
RunProgram="hidcon:cmd /c MD \"%Programfiles%\\AIMP3\\Icons\""
RunProgram="hidcon:Move neon.dll \"%Programfiles%\\AIMP3\\Icons\" /y"

timon45
03-12-2011, 23:16
gora, не получается
http://img15.imageshack.us/img15/8708/91555634.jpg

gora
03-12-2011, 23:49
не получается »
Мало информации. Выложите SFX, погляжу.

shao
03-12-2011, 23:53
RunProgram="hidcon:Move »

А откуда взялась команда "Move"

Может так правильнее :

RunProgram="hidcon:cmd /c Move.....




© OSzone.net 2001-2012