Кто-нибудь знает, как заставить пользователя перезагрузить компьютер после завершения установки? С помощью директивы AlwaysRestart = yes Setup все, что она делает, это предлагает пользователю перезапустить, выбрать между сейчас или позже, но на самом деле он не перезагружается автоматически или показывает только вариант «перезапустить сейчас». Является ли это возможным?
Спасибо.
2 ответа
Нет, это невозможно. Этот is hardcoded
и есть нет события, которое могло бы вызвать его изменение (например, путем скрытия переключателя Нет, я перезагружу компьютер позже ).
Но это правильно. Вы никогда не должны выключать систему без разрешения пользователя. Они могут потерять данные, когда вы это сделаете.
Вы можете сделать это так:
[Tasks]
Name: "RestartPC"; Description: "Restart the Computer"; GroupDescription: "Post Installation Options"; Flags: unchecked;
[Code]
function NeedRestart(): Boolean;
begin
if IsTaskSelected('RestartPC') then
Result := False;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
intResultCode: Integer;
begin
if CurStep = ssPostInstall then
if IsTaskSelected('RestartPC') then
NeedRestart;
if CurStep = ssDone then
begin
if IsTaskSelected('RestartPC') then
if SuppressibleMsgBox('A restart was selected, or Setup must restart your computer to complete the installation.' + #13#10 + #13#10 +
'Would you like to restart now?',
mbConfirmation, MB_YESNO, IDYES) = IDYES then
Exec('shutdown.exe', '-r -t 0', '', SW_HIDE,
ewNoWait, intResultCode);
end;
end;
ssDone
is signalled
когда последняя страница уже отображается. Но даже если бы это было не так, вам все равно нужно было бы запретить программе установки когда-либо запрашивать перезагрузку, поскольку пользователь может отменить ваш диалог, а когда программе установки потребуется перезагрузка, появится последняя страница с этими переключателями (так что пользователь просят дважды об одном и том же).
if IsTaskSelected('RestartPC') then NeedResart := False
на каком-то более раннем этапе установки (до ssDone), чтобы предотвратить появление переключателей?
PrepareToInstall
. Ну, это событие для вас, чтобы дополнительно запросить перезагрузку. Inno Setup обрабатывает свои собственные запросы на перезагрузку, когда они необходимы, поэтому это не помешает Inno Setup запрашивать перезагрузку при необходимости.
if CurStep = ssPostInstall
в том же procedure CurStepChanged
Похожие вопросы
Новые вопросы
inno-setup
Inno Setup - это инструмент для создания программ установки со встроенным языком сценариев, основанным на Pascal.
AlwaysRestart
значениеyes
, на последней странице появятся два переключателя, где установлен флажок Да, перезагрузить компьютер сейчас, поэтому пользователь может просто нажать Готово, чтобы перезапустить систему. Так что я не вижу здесь никакой проблемы. Однако, если вы спрашиваете, как отобразить диалоговое окно сообщения вместо этих переключателей, даже это невозможно сделать. Такое окно сообщения отображается, но только если вы запускаете установку в автоматическом режиме.