Автозапуск себя же

Эмиль

Новичок
1. При запуске дитсрибутива выполняется проверка установлена ли некая программа
2. Если некая программа установлена - продолжается работа с дистрибутивом
3. Если некая программа не установлена, начинается ее загрузка со стороннего ресурса и установка.
4. На момент установки дистрибутив закрывается.
5. Как после выполнения установки некой программы перезапустить дистрибутив автоматически?

Попробовал: ShellExec ('', ExpandConstant('{srcexe}'), '','', SW_SHOWNORMAL, ewNoWait, ErrorCode);

Не помогло чот
 

L-e-o-N

Старожил
1. При запуске дитсрибутива выполняется проверка установлена ли некая программа
2. Если некая программа установлена - продолжается работа с дистрибутивом
3. Если некая программа не установлена, начинается ее загрузка со стороннего ресурса и установка.
4. На момент установки дистрибутив закрывается.
5. Как после выполнения установки некой программы перезапустить дистрибутив автоматически?

Попробовал: ShellExec ('', ExpandConstant('{srcexe}'), '','', SW_SHOWNORMAL, ewNoWait, ErrorCode);

Не помогло чот
Есть два варианта:
  1. Сформировать bat скрипт который запустит установку необходимых программ а затем снова запустит ваш установщик, и запустить его
  2. Установщик не закрывать а просто прятать окно используя ShowWindow(WizardForm.Handle, SW_HIDE) (возможно константу и функцию придется подключать, если не знаете как то напишите)
 

Эмиль

Новичок
Есть два варианта:
  1. Сформировать bat скрипт который запустит установку необходимых программ а затем снова запустит ваш установщик, и запустить его
  2. Установщик не закрывать а просто прятать окно используя ShowWindow(WizardForm.Handle, SW_HIDE) (возможно константу и функцию придется подключать, если не знаете как то напишите)

Окей) я сделал Батник.
Я так понимаю его надо запилить в установщик
Files
Source: D:\Papka\set.bat; DestName: "set.bat"; Flags: dontcopy

как теперь сделать так, чтобы в определённый момент установщик обратился к этому файлу?
 

L-e-o-N

Старожил
Окей) я сделал Батник.
Я так понимаю его надо запилить в установщик
Files
Source: D:\Papka\set.bat; DestName: "set.bat"; Flags: dontcopy

как теперь сделать так, чтобы в определённый момент установщик обратился к этому файлу?
Можно в секции code згенерировать (со всеми путями) через SaveStringToFile:
Код:
SaveStringToFile(ExpandConstant('{app}\set.bat'), 'start /wait ' + ExpandConstant('{app}\command.exe parameters') + #13#10 + ExpandConstant('del {app}\command.exe parameters') + #13#10 + ExpandConstant('start {src}\setup.exe') + #13#10 + ExpandConstant('del {app}\set.bat'), True);
а скрипт можно выполнить:
Код:
var
  ResultCode: Integer;
begin
Exec(ExpandConstant('{win}\System32\cmd.exe'), ExpandConstant('/C {app}\set.bat'), ExpandConstant('{app}\'), SW_SHOW, //(или SW_HIDE если хотите спрятать консольное окно)
    ewWaitUntilTerminated, ResultCode);
end;
Для доп. пз и скрипта не рекомендуется использовать директорию {tmp} так как:
  1. Эта директория удаляется после закрытия установщика
  2. Каждый раз при запуске будет создаватся временная директория с новым именем
По этому рекомендую все это делать в какой нибуть другой папке (я взял {app} но пример тоже не очень удачный так как во время установки эта папка может изменится) и вручную прибрать за собой
 
Последнее редактирование:

Эмиль

Новичок
Можно в секции code згенерировать (со всеми путями) через SaveStringToFile:
Код:
SaveStringToFile(ExpandConstant('{app}\set.bat'), 'start /wait ' + ExpandConstant('{app}\command.exe parameters') + #13#10 + ExpandConstant('del {app}\command.exe parameters') + #13#10 + ExpandConstant('start {src}\setup.exe') + #13#10 + ExpandConstant('del {app}\set.bat'), True);
а скрипт можно выполнить:
Код:
var
  ResultCode: Integer;
begin
Exec(ExpandConstant('{win}\System32\cmd.exe'), ExpandConstant('/C {app}\set.bat'), ExpandConstant('{app}\'), SW_SHOW, //(или SW_HIDE если хотите спрятать консольное окно)
    ewWaitUntilTerminated, ResultCode);
end;
Для доп. пз и скрипта не рекомендуется использовать директорию {tmp} так как:
  1. Эта директория удаляется после закрытия установщика
  2. Каждый раз при запуске будет создаватся временная директория с новым именем
По этому рекомендую все это делать в какой нибуть другой папке (я взял {app} но пример тоже не очень удачный так как во время установки эта папка может изменится) и вручную прибрать за собой

Сделал проще) Положил batНик рядом с самим Установщиком) в батнике написано Start установщик.exe
а в код зашил шелэксек в определнный момент этого батника)
 
Сверху