Скрипты Inno Setup. Помощь и советы [часть 7]

Ответить
 • Просмотры: 59
Аватара пользователя
ROMKA-1977

Re: Скрипты Inno Setup. Помощь и советы [часть 7]

Сообщение ROMKA-1977 »

saurn, при обычной упаковке всё OK. Но у меня упаковка не через секцию [Files] а в архивы .arc.
Аватара пользователя
saurn

Re: Скрипты Inno Setup. Помощь и советы [часть 7]

Сообщение saurn »

Tixo, объявите переменную:



Код:

Код: Выделить всё

var
    EC: Integer;

P.S.

Заливайте файлы в *.zip или *.rar, на худой конец в *.7z - это ускорит решение вашего вопроса. Не у всех установлен FreeArc, и не каждый станет его устанавливать.
Аватара пользователя
saurn

Re: Скрипты Inno Setup. Помощь и советы [часть 7]

Сообщение saurn »

ROMKA-1977, в стандартном примере к библиотеке распаковка архивов находится в блоке процедуры CurStepChanged, вызов функций ISDone осуществляется на шаге ssInstall. В окончании блока:



Код:

Код: Выделить всё

if CurStep = ssInstall then begin
// здесь распаковка архивов и вызов прочих функций.
//в самом низу блока строчки
    HideControls;
    WizardForm.CancelButton.Visible:=true;
    WizardForm.CancelButton.Enabled:=false;
// здесь отключайте кнопку
   ResizeButton.Enabled := False;
  end;
Аватара пользователя
ROMKA-1977

Re: Скрипты Inno Setup. Помощь и советы [часть 7]

Сообщение ROMKA-1977 »

Подскажите что означает ошибка: Exception: External exception EEDFADE.



На странице InstallingPage прописал кнопку минимизации инстала (сворачивание в нижний правый угол) и кнпку возврата в исходный размер + код слайдшоу с применением isSlideShow.dll.



Проблема: isSlideShow работает нормально но после минимизации окна и далее возврата окна в исходное состояние вылетает ошибка: Exception: External exception EEDFADE с подсветкой строки: ShowImage(piclist.strings[CurrentPicture - 1], 1, 1000);



Пример кода:


читать дальше »




[Setup]

AppName=Name

VersionInfoVersion=5.0

AppVerName=VerName

DefaultDirName={pf}\My program

ShowTasksTreeLines=true

OutputDir=.



[Languages]

Name: Ru; MessagesFile: compiler:Languages\Russian.isl



[Tasks]

Name: Soft; Description: Установка дополнительного программного обеспечения; GroupDescription: Дополнительное программное обеспечение:; Flags: unchecked

Name: Soft/DirectX; Description: Microsoft DirectX; Flags: unchecked

Name: Soft/vcredist_x86; Description: Microsoft Visual С++ 2005 Redistributable; Flags: unchecked

Name: Soft/vcredist_x64; Description: Microsoft Visual С++ 2005 Redistributable x64; Flags: unchecked; Check: IsWin64



[Files]

Source: {win}\help\*; DestDir: {app}\Files; AfterInstall: BtnDisable(); Flags: external recursesubdirs createallsubdirs;



Source: Image_1.png; DestDir: {tmp}; Flags: dontcopy

Source: Image_2.png; DestDir: {tmp}; Flags: dontcopy

Source: Image_3.png; DestDir: {tmp}; Flags: dontcopy



Source: isSlideShow.dll; DestDir: {tmp}; Flags: dontcopy



[Run]

Filename: {src}\DirectX\DXSETUP.exe; Parameters: /silent; Tasks: Soft/DirectX; StatusMsg: Установка DirectX;

Filename: {src}\MVC++2005\vcredist_x86.exe; Tasks: Soft/vcredist_x86; Parameters: /q; StatusMsg: Установка Microsoft Visual С++ 2005 Redistributable;

Filename: {src}\MVC++2005\vcredist_x64.exe; Tasks: Soft/vcredist_x64; Parameters: /q; StatusMsg: Установка Microsoft Visual С++ 2005 Redistributable x64;


Код: Выделить всё


///////////////////////// Кнопки "Min" и "Max" /////////////////////////

var

	ResizeButton: TButton;

	PageResized, Show: Boolean;



function GetSystemMetrics(nIndex:Integer):integer; 

external 'GetSystemMetrics@user32.dll stdcall delayload';



procedure MinimizeInstallPage();

begin

	WizardForm.MainPanel.Hide;

	WizardForm.Bevel1.Hide;

	WizardForm.Width:= ScaleX(395);

	WizardForm.Height:= ScaleY(142);

	WizardForm.Left:= GetSystemMetrics(16)-ScaleX(420);

	WizardForm.Top:= GetSystemMetrics(17)-ScaleX(150);

	WizardForm.InnerNotebook.Left:= ScaleX(10);

	WizardForm.InnerNotebook.Top:= ScaleY(10);

	WizardForm.InnerNotebook.Width:= ScaleX(370);

	WizardForm.StatusLabel.Left:= ScaleX(0);

	WizardForm.StatusLabel.Top:= ScaleY(0);

	WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;

	WizardForm.FileNameLabel.Left:= ScaleX(0);

	WizardForm.FileNameLabel.Top:= ScaleY(20);

	WizardForm.FileNameLabel.Width:= WizardForm.InnerNotebook.Width;

	WizardForm.ProgressGauge.Top:= ScaleY(40);

	WizardForm.ProgressGauge.Width:= WizardForm.InnerNotebook.Width;

	WizardForm.CancelButton.Left:= ScaleX(220);

	WizardForm.CancelButton.Top:= ScaleY(80);

	WizardForm.CancelButton.BringToFront;

	ResizeButton.Left:= ScaleX(60);

	ResizeButton.Top:= ScaleY(80);

	ResizeButton.Caption:= 'Max.';

	PageResized:= True;

end;



procedure ResumeInstallPage();

begin

	WizardForm.Width:= ScaleX(503);

	WizardForm.Height:= ScaleY(388);

	WizardForm.Position:= poScreenCenter;

	if Show then begin	

		WizardForm.MainPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(58));

		WizardForm.MainPanel.Show;

		WizardForm.Bevel1.Show;

	end;

	WizardForm.InnerNotebook.SetBounds(ScaleX(40), ScaleY(72), ScaleX(417), ScaleY(237));

	WizardForm.StatusLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(16));

	WizardForm.FilenameLabel.SetBounds(ScaleX(0), ScaleY(16), ScaleX(417), ScaleY(16));

	WizardForm.ProgressGauge.SetBounds(ScaleX(0), ScaleY(42), ScaleX(417), ScaleY(21));

	WizardForm.CancelButton.SetBounds(ScaleX(412), ScaleY(327), ScaleX(75), ScaleY(23));

	ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));

	ResizeButton.Caption:= 'Min.';

	PageResized:= False;

end;



procedure ResizeButtonOnClick(Sender: TObject);

begin

	If PageResized then

		ResumeInstallPage

	else

		MinimizeInstallPage;

end;



procedure InitializeWizard1();

begin

	ResizeButton:= TButton.Create(WizardForm);

	ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));

	ResizeButton.OnClick:= @ResizeButtonOnClick;

	ResizeButton.Caption:= 'Min.';

	ResizeButton.Hide;

	ResizeButton.Parent:= WizardForm;

end;



procedure CurPageChanged1(CurPageID: Integer);

begin

	ResizeButton.Hide;

	case CurPageID of

		wpInstalling: 

		begin

			Show:= true;

			ResizeButton.Show;

		end;

		wpFinished: 

		begin

			Show:= false;

			ResumeInstallPage;

		end;

	end;

end;



procedure BtnDisable();

begin

  ResizeButton.Enabled := False;

end;



///////////////////////// isSlideShow v1.03 /////////////////////////

type

  TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);

  

var

  TimerID: LongWord;

  CurrentPicture:integer;

  PicList: TStringlist;



function WrapTimerProc(Callback:TProc; NumParam:integer): longword; 

external 'WrapCallback@files:isslideshow.dll stdcall';

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; 

external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd, nIDEvent: LongWord): LongWord; 

external 'KillTimer@user32.dll stdcall';

//function GetSystemMetrics(nIndex:Integer):Integer; 

//external 'GetSystemMetrics@user32.dll stdcall';

procedure InitializeSlideShow(Hwnd:Thandle; l,t,w,h:integer;Animate:boolean; Stretch:integer); 

external 'InitializeSlideShow@files:isslideshow.dll stdcall';

procedure DeinitializeSlideShow; 

external 'DeinitializeSlideShow@files:isslideshow.dll stdcall';

procedure ShowImage(ipath:PAnsiChar; Effect:integer; SpeedTransition: integer); 

external 'ShowImage@files:isslideshow.dll stdcall';



procedure InitializeWizard2();

begin

  PicList:=tstringlist.Create;

  ExtractTemporaryFile('Image_1.png');

  ExtractTemporaryFile('Image_2.png');

  ExtractTemporaryFile('Image_3.png');;

  piclist.add(ExpandConstant('{tmp}') + '\Image_1.png');

  piclist.add(ExpandConstant('{tmp}') + '\Image_2.png');

  piclist.add(ExpandConstant('{tmp}') + '\Image_3.png');

end;



procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);

begin

  CurrentPicture:=CurrentPicture+1;

  if CurrentPicture=piclist.count+1 then CurrentPicture:=1;

  ShowImage(piclist.strings[CurrentPicture - 1], 1, 1000);

end;



procedure CurPageChanged2(CurPageID: Integer);

begin

  If CurPageID=wpInstalling then

  begin

    InitializeSlideShow(WizardForm.InstallingPage.Handle, 0, 131, ScaleX(417), ScaleY(101), true, 2);

    CurrentPicture:=1;

    ShowImage(piclist.strings[CurrentPicture-1], 1, 1000);

    TimerID:=SetTimer(0, 0, 3000, WrapTimerProc(@OnTimer, 4)); //задержка 3000 мс (3 секунды)

  end;

  if CurPageID=wpFinished then

  begin

    KillTimer(0, TimerID);

    DeinitializeSlideShow;

  end;

end;



procedure DeinitializeSetup();

begin

  DeinitializeSlideShow;

  KillTimer(0, TimerID);

end;



//////////////

procedure InitializeWizard(); 

begin 

  InitializeWizard1(); 

  InitializeWizard2();

end;



procedure CurPageChanged(CurPageID: Integer);

begin 

  CurPageChanged1(CurPageID);

  CurPageChanged2(CurPageID);

end;






Сборка:

[url=http://rghost.ru/58771778]http://rghost.ru/58771778[/url]
Аватара пользователя
Dodakaedr

Re: Скрипты Inno Setup. Помощь и советы [часть 7]

Сообщение Dodakaedr »

Всем привет! Как можно определить, требуется ли перезагрузка компа или нет? Ситуация в следующем: имеется программа которая после удаления требует перезагрузку компа, но пользователь выбирает нет и при повторной установки без перезагрузки пк не хочет устанавливаться. Как определить это самое требование перезагрузки?
Аватара пользователя
diman_21Ru

Re: Скрипты Inno Setup. Помощь и советы [часть 7]

Сообщение diman_21Ru »

Всем привет в скрипте есть функции при наведение на мод описание и картинка как можно прикрутить звук при выборе мода, пример тут :
Аватара пользователя
bandaletoff

Re: Скрипты Inno Setup. Помощь и советы [часть 7]

Сообщение bandaletoff »

Доброго времени суток!

Подскажите пожалуйста, что и куда добавить в скрипт, чтобы перед деинсталляцией программы, сначала удалились драйвера. Папка с файлами на установку и удаление драйверов находится в каталоге программы.

Спасибо!
Аватара пользователя
Zorbbb

Re: Скрипты Inno Setup. Помощь и советы [часть 7]

Сообщение Zorbbb »

Уважаемые, путь к установленной игре можно узнать из секции Setup, вот пример:



Код:

Код: Выделить всё

[Setup]
DefaultDirName={reg:HKCU\SOFTWARE\Comp\Game,InstallDir|{sd}\Games\Game1}

А как правильно прописать такой ключ? Не пойму как быть с фигурными скобками.



Код:

Код: Выделить всё

[HKEY_LOCAL_MACHINE\SOFTWARE\1C\{BAC329E8-C7D7-4777-8D69-3AFD40603326}]
"InstallDir"="C:\\Games\\Game1"
Аватара пользователя
Shkutu

Re: Скрипты Inno Setup. Помощь и советы [часть 7]

Сообщение Shkutu »

Всех приветствую, у меня ту вопрос возник. В инно есть такая директива как AllwaysRestart. В случае, когда она выставлена в "yes" инсталлятор после установки спрашивает пользователя, надо ли перезагружать систему и по-умолчанию выбрано "да". Так вот вопрос - как сделать так, чтоб по-умолчанию там было выбрано "нет"? Есть ли какая-то настройка для этого или какой компонент у формы инсталлятора отвечает за эти радио-кнопки?



bandaletoff, используйте секцию [UninstallRun]. подробнее можно посмотреть в справке.
Ответить

Вернуться в «Автоматическая установка приложений»