Показать полную графическую версию : Модифицированный SFX модуль 7-Zip'а для установок
gora,
Отлично! То, что доктор прописал! Всё прошло с первого раза! Огромнейшее спасибо!
P.S. К сожалению, не могу благодарность выразить так, как здесь положено - почему-то периодически исчезает эта функция, вот и сейчас её нет. :(
P.S. К сожалению, не могу благодарность выразить так, как здесь положено - почему-то периодически исчезает эта функция, вот и сейчас её нет. »
Возможно, превышено суточное ограничение на количество отмечаемых полезных сообщений.
Iska,
Не думаю, но кто его знает... В любом случае - принял к сведению. Спасибо.
Можно ли с помощью ключей запустить команду перед распаковкой и псоле распаковки?
Т.е. перед распаковкой мне нужно убить процесс (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@!
после создания 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 просто запускаю без ключей.
Я правильно понял »
Правильно, этого достаточно.
чтобы запускать созданный архив без ключей, тогда надо просто задать команду 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@!
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"
и еще проще:
RunProgram="test_%%Pbit.msi /qn"
и еще проще: »
Это не всегда одно и тоже, ибо мы не знаем, что там в 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 системе и сравните результат.
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 будут разные системные переменные (значения их)?
сам же себе отвечу.
системные переменные в нашем случае будут разные!!!
это всё для х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, поясни?
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-м случае?
; папка назначения уже существует
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"
gora, не получается
http://img15.imageshack.us/img15/8708/91555634.jpg
не получается »
Мало информации. Выложите SFX, погляжу.
RunProgram="hidcon:Move »
А откуда взялась команда "Move"
Может так правильнее :
RunProgram="hidcon:cmd /c Move.....
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.