Хамик
Старожил
@Александр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;