Хамик
Старожил
@Александр85, с помощью функций IsTaskSelected или IsComponentSelected, смотря через что у вас задача реализована. Примеров использования функций полно в интернете, но в справке это все есть.
cleanmgr.exe /c /autoclean /setup /lowrisk setup & lowrisk на усмотрениеПодскажите, кто-нибудь, как тогда, как "по-тихому", запустить стандартное средство очистки cleanmgr.exe, чтобы там было по максимуму галочек и без какого либо участия и отображения для пользователя?!
procedure CurStepChanged(CurStep: TSetupStep);
var i: integer;
begin
if CurStep = ssDone then
begin
Exec(ExpandConstant('{app}\test.bat'), ' /q /norestart', '', SW_HIDE, ewWaitUntilTerminated, i); //выполнение бат-файла
DeleteFile(ExpandConstant('{app}\test.bat')); // Удаление файла
DelTree(ExpandConstant('{app}\testdiru'), True, True, True); // Удаление папки
end;
end;
Проблема в батнике устранена. С учётом вышесказанного, если я построчно сделаю (как в коде выше), то сначала выполниться батник, а затем удаление файла и папки?Проверь правильность выполнения бат файла SW_SHOW, а батник можно сделать что бы удалял себя сам по выполнении. В конце батника дописатьdel /f /q "%~dp0start.bat"
То-есть, дождётся когда выполнится батник, а затем перейдёт дальше удалять? Мне главное чтоб батник не удалился до конца выполнения его содержимого. Батник довольно большой и выполняет некоторое время действия.В той очередности и будет выполнение.
Если функция возвратит True и Wait имеет значение ewWaitUntilTerminated, тогда ResultCode содержит код выхода запущенного процесса.
Если функция возвратит False, тогда ResultCode содержит код ошибки. Чтобы получить описание ошибки, используйте SysErrorMessage(ResultCode).
ShellExec('open', ExpandConstant('{app}\1.txt '), '', '', SW_SHOW, ewNoWait, ErrorCode);Понять не могу, батник запускается, но текстовый файл, блокнотом или средство поумолчанию не открывает.
Exec(ExpandConstant('{app}\1.txt'),'','', SW_SHOW, ewWaitUntilTerminated, Res);
или так
Exec('{app}' + '\1.txt', '', '', SW_SHOW, ewNoWait, Res);
Спасибо за ответ.ShellExec('open', ExpandConstant('{app}\1.txt '), '', '', SW_SHOW, ewNoWait, ErrorCode);
@echo on
::Делаем копию архива
IF NOT EXIST "Backup\data.tpk" (COPY /Y "..\data.tpk" "Backup\data.tpk") ELSE (ECHO Backup has been done already)
::Внедряем файлы в архив черех скрипт
IF EXIST "Backup\data.tpk" (quickbms.exe -w -r -r -r Tiny_Thor_TPK_script.bms "..\data.tpk" "Data_rus") ELSE (ECHO File not found data.tpk)
::Самоуничтожение
del /f /q "%~dp0Install.bat"
Filename: "{app}\rus\quickbms.exe"; Parameters: "-w -r -r -r Tiny_Thor_TPK_script.bms ""..\data.tpk"" ""Data_rus"""; Flags: shellexec
Filename: "{sys}\cmd.exe"; Parameters: "тупо_все_команды_файла_Install.bat"; WorkingDir: "{app}\rus"; Flags: shellexec
(кроме самоуничтожения), то компилятор не понимает цепочку событий и глохнет на вызове quickbms.exe уже в процессе инсталляции.#include "SHFileOperation.iss"
, но здесь загвоздка в другом. Я не копирую готовый файл data.tpk в папку установки, ведь его модифицирует quickbms.exe в процессе установки с помощью Tiny_Thor_TPK_script.bms, но тем не менее оригинал надо отправить в папку Backup.Скрипт отлично работает, если использовать@Cyberworm,сам батник, если его положить в нужную папку и запустить отрабатывает нормально? При запуске через shellexec все необходимые файлы лежат на месте?
Filename: "{app}\rus\Install.bat"; Parameters: "Install"; Flags: shellexec
(тестовый вариант с pause, который требует участие пользователя для скриншота ниже). В конечном варианте паузы не будет, ибо я использую самоуничтожение Install.bat и Flags: runhidden
Скрипт отлично работает, если использоватьFilename: "{app}\rus\Install.bat"; Parameters: "Install"; Flags: shellexec
(тестовый вариант с pause, который требует участие пользователя для скриншота ниже). В конечном варианте паузы не будет, ибо я использую самоуничтожение Install.bat иFlags: runhidden
Поэтому я пришёл к выводу, что секция Parameters является малость кастрированной с ограниченным функционалом. Надо эту логику в секцию Code переносить и там через условие запускать записи из секции Run. То есть, примерно что-то такое:
IF NOT FILEEXISTS("Путь до бекапа data.tpk")
Run_backup()
RUN_BMS()
ENDIF;
Run_backup():
FileCopy("data.tpk" "rus\backup\data.tpk", FALSE)
Run_BMS():
Filename: "quick_bms.exe" Parameters: -w -r -r -r Tiny_Thor_TPK_script.bms ""..\data.tpk""
Как бы это всё правильно организовать?
[Run]
Filename: "{app}\rus\quickbms.exe"; Parameters: "-w -r -r -r Tiny_Thor_TPK_script.bms ""..\data.tpk"" ""data_rus"""; Check: RunBMS; Flags: runhidden
[Code]
function RunBMS: Boolean;
begin
if not (FileExists(ExpandConstant('{app}\rus\Backup\data.tpk'))) then
begin
FileCopy(ExpandConstant('{app}\data.tpk'), ExpandConstant('{app}\rus\Backup\data.tpk'), False);
Result := True;
end else
begin
Result := False;
end;
end;