Вопрос Ошибка при деинсталляции

Timick

Старожил
Приветствую! Вот возникла небольшая проблемка. Попробовал заменить в скрипте обычную ботву, на вот эту http://krinkels.org/resources/botva2protect.51/. В общем вроде работает, но при попытке запустить деинсталлятор выдается вот эта ошибка:

В общем, прошу помощи в исправлении ошибки. Скрипт залил во вложение. Заранее благодарю!
Скачать файлы можно по ссылке: https://cloud.mail.ru/public/YWaC/VqBhXVktU
 
Последнее редактирование:

Kotyarko_O

Новичок
Timick, при установке, файлы для деинсталляции кидаете в папку "{app}\Uninstall"; а при самой деинсталляции пытаетесь брать из "{app}".
Код:
[Files]
Source: "Icons\*"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\Dll\b2p.dll"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\Dll\botva2.dll"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\WizardImage.jpg"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\ProgressBackground.png"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\ProgressImg.png"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\StatusPanel2.png"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\StatusPanel.png"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\Button.png"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\Workspace.png"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ISSkin\Tiger.cjstyles"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ISSkin\ISSkin.dll"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Код:
function InitializeUninstall: Boolean;
begin
  FileCopy(ExpandConstant('{app}\b2p.dll'), ExpandConstant('{tmp}\b2p.dll'), False);
  FileCopy(ExpandConstant('{app}\botva2.dll'), ExpandConstant('{tmp}\botva2.dll'), False);
  FileCopy(ExpandConstant('{app}\isskin.dll'), ExpandConstant('{tmp}\isskin.dll'), False);
  FileCopy(ExpandConstant('{app}\Tiger.cjstyles'), ExpandConstant('{tmp}\Tiger.cjstyles'), False);
  LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
  Result:=True;
end;
 

Timick

Старожил
Timick, при установке, файлы для деинсталляции кидаете в папку "{app}\Uninstall"; а при самой деинсталляции пытаетесь брать из "{app}".
Код:
[Files]
Source: "Icons\*"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\Dll\b2p.dll"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\Dll\botva2.dll"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\WizardImage.jpg"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\ProgressBackground.png"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\ProgressImg.png"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\StatusPanel2.png"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\StatusPanel.png"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\Button.png"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ImageFiles\Workspace.png"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ISSkin\Tiger.cjstyles"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "{#IncludeFiles}\ISSkin\ISSkin.dll"; DestDir: "{app}\Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Код:
function InitializeUninstall: Boolean;
begin
  FileCopy(ExpandConstant('{app}\b2p.dll'), ExpandConstant('{tmp}\b2p.dll'), False);
  FileCopy(ExpandConstant('{app}\botva2.dll'), ExpandConstant('{tmp}\botva2.dll'), False);
  FileCopy(ExpandConstant('{app}\isskin.dll'), ExpandConstant('{tmp}\isskin.dll'), False);
  FileCopy(ExpandConstant('{app}\Tiger.cjstyles'), ExpandConstant('{tmp}\Tiger.cjstyles'), False);
  LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
  Result:=True;
end;
Спасибо, одну глупую ошибку исправил :) Но вылезла ещё одна, вот:
 

Shegorat

Lord of Madness
Администратор
Но вылезла ещё одна, вот:
Эта функция используется для получения размера файла, сжатого самим инсталлятором. В деинсталляторе естественно недоступна.
Загружайте изображения родными методами ботвы. Честно говоря, в вашем случае я даже и не знаю, зачем использовать b2p, т.к. изображения всё равно сохраняются в папке установки.
 

Timick

Старожил
Эта функция используется для получения размера файла, сжатого самим инсталлятором. В деинсталляторе естественно недоступна.
Загружайте изображения родными методами ботвы. Честно говоря, в вашем случае я даже и не знаю, зачем использовать b2p, т.к. изображения всё равно сохраняются в папке установки.
Да, решил не использовать b2p... Скрипт не мой, да и все изображения уже есть в интернете :) Все равно, спасибо за ответ!
 

SVY

Новичок
Похожая ошибка деинсталлятора.

ExtractTemporaryFileSize.jpg
Фрагмент кода:

procedure InitializeUninstallProgressForm;
begin
u:=UninstallProgressForm.Handle;
ClientWidth:=ScaleX(648);
ClientHeight:=ScaleY(390);
BorderStyle:=bsSingle
OuterNotebook.Hide;
InnerNotebook.Hide;
Bevel.Hide;
Center;
ImgLoad(u,ExpandConstant('{tmp}\WizardImage.jpg'),0,0,648,390,true,true);
end;
ImgApplyChanges(u);
end;


Строка ImgLoad(u,ExpandConstant('{tmp}\WizardImage.jpg'),0,0,648,390,true,true); виновата.
Брал этот код из других подобных скриптов. Там было всё в порядке, а у меня ошибка.
Как с помощью ботвы реализовать загрузку фона окна деинсталлятора?
 
Последнее редактирование:

Kotyarko_O

Новичок
SVY, не самый удачный скриншот.

Upd: исправили.
Проблема в функции ImgLoad (botva2.iss), там у вас используется недоступная при деинсталляции функция ExtractTemporaryFileSize (что понятно по скриншоту).
 
Последнее редактирование:

SVY

Новичок
Возможно здесь нету ; в конце?
BorderStyle:=bsSingle
Проверил, дело не в этом.
Стоит закомментировать строку ImgLoad(u,ExpandConstant('{tmp}\WizardImage.jpg'),0,0,648,390,true,true);, как ошибки нет.
 

sergey3695

Ветеран
Модератор
SVY,
Код:
////////////////////// Начало botva2u.iss //////////////////

function ImgLoadBotvaU(Wnd :HWND; FileName :PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';
function BtnCreateBotvaU(hParent :HWND; Left, Top, Width, Height :integer; FileName :PAnsiChar; ShadowWidth :integer; IsCheckBtn :boolean) :HWND; external 'BtnCreate@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetPositionBotvaU(img :Longint; NewLeft, NewTop, NewWidth, NewHeight :integer); external 'ImgSetPosition@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetVisiblePartU(img:Longint; NewLeft, NewTop, NewWidth, NewHeight : integer); external 'ImgSetVisiblePart@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetTextBotvaU(h :HWND; Text :PAnsiChar); external 'BtnSetText@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetFontU(h :HWND; Font :Cardinal); external 'BtnSetFont@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetEventBotvaU(h :HWND; EventID :integer; Event :Longword); external 'BtnSetEvent@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetFontColorBotvaU(h :HWND; NormalFontColor, FocusedFontColor, PressedFontColor, DisabledFontColor :Cardinal); external 'BtnSetFontColor@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetEnabledBotvaU(h :HWND; Value :boolean); external 'BtnSetEnabled@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChangesBotvaU(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdownBotvaU; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';

type
  TImgPBun = record Left, Top, Width, Height, MaxWidth: integer; img1,img2: Longint; end;
  TPBProc = function (h:hWnd;Msg,wParam,lParam:Longint):Longint;

function ImgPBCreateUn(hParent :HWND; bk, pb :ansistring; Left, Top, Width, Height :integer):TImgPBun;
begin
  Result.Left:=Left;
  Result.Top:=Top;
  Result.Width:=0;
  Result.Height:=Height;
  Result.MaxWidth:=Width;
if Length(pb)>0 then Result.img1:=ImgLoadBotvaU(hParent,pb,Result.Left,Result.Top,Result.Width,Result.Height,True,False) else Result.img1:=0;
if Length(bk)>0 then Result.img2:=ImgLoadBotvaU(hParent,bk,Left,Top,Width,Height,True,True) else Result.img2:=0;
end;

procedure ImgPBSetPositionUn(var PB :TImgPBun; Percent :Extended);
var
  NewWidth:integer;
begin
if PB.img1<>0 then begin
  NewWidth:=Round(PB.MaxWidth*Percent/100);
if PB.Width<>NewWidth then begin
  PB.Width:=NewWidth;
  ImgSetPositionBotvaU(PB.img1,PB.Left,PB.Top,PB.Width,PB.Height);
  ImgSetVisiblePartU(PB.img1,ScaleX(0),ScaleY(0),ScaleX(PB.Width),ScaleY(PB.Height));
end;
end;
end;

////////////////////// Конец botva2u.iss ///////////////////
 
  • Like
Реакции: SVY

SVY

Новичок
sergey3695, спасибо.
Ошибка исчезла, но появилась другая
Uninstall.jpg

Код здесь:
 

Вложения

Последнее редактирование:

SBalykov

Старожил
sergey3695, спасибо.
Ошибка исчезла, но появилась другая
Посмотреть вложение 2838

Код здесь:
Попробуй так:
Код:
function InitializeUninstall(): Boolean;
begin
Result:=True;
FileCopy(ExpandConstant('{app}\Uninstall\WizardImage.jpg'), ExpandConstant('{tmp}\WizardImage.jpg'), True);
FileCopy(ExpandConstant('{app}\Uninstall\pb.png'), ExpandConstant('{tmp}\pb.png'), True);
FileCopy(ExpandConstant('{app}\Uninstall\pbbkg.png'), ExpandConstant('{tmp}\pbbkg.png'), True);
FileCopy(ExpandConstant('{app}\Uninstall\botva2.dll'), ExpandConstant('{tmp}\botva2.dll'), True);
FileCopy(ExpandConstant('{app}\Uninstall\InnoCallback.dll'), ExpandConstant('{tmp}\InnoCallback.dll'), True);
FileCopy(ExpandConstant('{app}\Uninstall\ISSkin.dll'), ExpandConstant('{tmp}\ISSkin.dll'), True);
FileCopy(ExpandConstant('{app}\Uninstall\close.png'), ExpandConstant('{tmp}\close.png'), True);
FileCopy(ExpandConstant('{app}\Uninstall\Crysis.cjstyles'), ExpandConstant('{tmp}\Crysis.cjstyles'), True);
LoadSkinUninst(ExpandConstant('{tmp}\Crysis.cjstyles'), '');
end;
 
Последнее редактирование:

SVY

Новичок
Нет, не помогло.
Что-то (форма?) создаётся раньше окна деинсталлятора.
 

sergey3695

Ветеран
Модератор
SVY,
попробуй
Код:
    u:=UninstallProgressForm.Handle;
в InitializeUninstallProgressForm опустить на 139 строчку перед ImgLoadBotvaU. хз файлы подбирать влом. должно помочь.
 

SVY

Новичок
sergey3695,
не помогло. Может дело в версии ботвы, я использовал v. 0.9.7.151
 

sergey3695

Ветеран
Модератор
SVY,
Код:
[code]
type
  TImgPB = record
    Left, Top, Width, Height, MaxWidth  : integer;
    img1,img2 : Longint;
  end;

var
  UninstPB:  TImgPB;
  UninstPBOldProc: Longint;
  UFCaption: string;
  ProgressInfoLabel, Uninstalling, StatusUninstLabel, UninstPageDescriptLabel, WizardUninstLabel: TLabel;
  uCancelUninstBtn: HWND;
  ButtonFont: TFont;
  u:HWND;
#include "botva2u.iss"
procedure LoadSkinUninst(lpszPath: string; lpszIniFileName: string ); external 'LoadSkin@{tmp}\ISSkin.dll stdcall delayload uninstallonly';
procedure UnloadSkinUninst(); external 'UnloadSkin@{tmp}\ISSkin.dll stdcall delayload uninstallonly';
(*
function UninstPBProc(h:hWnd;Msg,wParam,lParam:Longint):Longint;
var
  pr,i1,i2:Extended;
  p:string;
begin
  if Msg=$2 then SetWindowLong(h,-4,UninstPBOldProc);

  Result:=CallWindowProc(UninstPBOldProc,h,Msg,wParam,lParam);

  if (Msg=$402) and (UninstallProgressForm.ProgressBar.Position>UninstallProgressForm.ProgressBar.Min) then begin
    i1:=UninstallProgressForm.ProgressBar.Position-UninstallProgressForm.ProgressBar.Min;
    i2:=UninstallProgressForm.ProgressBar.Max-UninstallProgressForm.ProgressBar.Min;
    pr:=(i1*100)/i2;
    p:=' - ['+Format('%f',[pr])+'%]';
    StringChange(p,',','.');

    UninstallProgressForm.Caption:=UFCaption+p;

  end;
end;
*)
//=====================[Подключение скина к деинсталлятору - начало]=====================
function InitializeUninstall(): Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\WizardImage.jpg')) then  FileCopy(ExpandConstant('{app}\Uninstall\WizardImage.jpg'), ExpandConstant('{tmp}\WizardImage.jpg'), False);
if not FileExists(ExpandConstant('{tmp}\pb.png')) then  FileCopy(ExpandConstant('{app}\Uninstall\pb.png'), ExpandConstant('{tmp}\pb.png'), False);
if not FileExists(ExpandConstant('{tmp}\pbbkg.png')) then  FileCopy(ExpandConstant('{app}\Uninstall\pbbkg.png'), ExpandConstant('{tmp}\pbbkg.png'), False);
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then  FileCopy(ExpandConstant('{app}\Uninstall\botva2.dll'), ExpandConstant('{tmp}\botva2.dll'), False);
if not FileExists(ExpandConstant('{tmp}\InnoCallback.dll')) then  FileCopy(ExpandConstant('{app}\Uninstall\InnoCallback.dll'), ExpandConstant('{tmp}\InnoCallback.dll'), False);
if not FileExists(ExpandConstant('{tmp}\ISSkin.dll')) then  FileCopy(ExpandConstant('{app}\Uninstall\ISSkin.dll'), ExpandConstant('{tmp}\ISSkin.dll'), False);
if not FileExists(ExpandConstant('{tmp}\Cancel.png')) then  FileCopy(ExpandConstant('{app}\Uninstall\close.png'), ExpandConstant('{tmp}\close.png'), False);
if not FileExists(ExpandConstant('{tmp}\Crysis.cjstyles')) then  FileCopy(ExpandConstant('{app}\Uninstall\Crysis.cjstyles'), ExpandConstant('{tmp}\Crysis.cjstyles'), False);
  LoadSkinUninst(ExpandConstant('{tmp}\Crysis.cjstyles'), '');
  Result:=True;
end;
//=====================[Подключение скина к деинсталлятору - конец]=====================
////////////////////// UninstallingPage //////////////////////
procedure InitializeUninstallProgressForm;
begin
  with UninstallProgressForm do
  begin
    ClientWidth:=ScaleX(648);
    ClientHeight:=ScaleY(390);
    BorderStyle:=bsSingle;
//    BorderIcons:=[biSystemMenu]
    OuterNotebook.Hide;
    InnerNotebook.Hide;
    Bevel.Hide;
    Center;

//    ImgLoadBotvaU(u,ExpandConstant('{tmp}\WizardImage.jpg'),0,0,648,390,true,true);

    WizardUninstLabel:= TLabel.Create(UninstallProgressForm);
    with WizardUninstLabel do begin
      AutoSize:=False;
      SetBounds(ScaleX(215), ScaleY(232), ScaleX(650), ScaleY(65));
      Transparent:=True;
      Font.Name:= {#FontName};
      Font.Size:= 13;
      Font.Color:={#FontColor};
      Font.Style:=[fsBold];
      Caption:= ExpandConstant('{cm:WizardUninst}'); // Состояние удаления
      Parent := UninstallProgressForm;
    end;

    UninstPageDescriptLabel := TLabel.Create(UninstallProgressForm);
    with UninstPageDescriptLabel do begin
      AutoSize:=False;
      SetBounds(ScaleX(100), ScaleY(215), ScaleX(600), ScaleY(50));
      WordWrap:= True;
      Transparent:=True;
      Font.Name:= {#FontName};
      Font.Size:= 10;
      Font.Color:={#FontColor};
      Font.Style:=[fsBold, fsItalic];
      Caption:= ExpandConstant('{cm:UninstDescript}'); // Подождите, пока игра будет удалена с Вашего компьютера.
      Parent := UninstallProgressForm;
    end;

    StatusUninstLabel := TLabel.Create(UninstallProgressForm);
    with StatusUninstLabel do begin
      AutoSize:=False;
      SetBounds(ScaleX(120), ScaleY(250), ScaleX(560), ScaleY(17));
      Transparent:=True;
      Font.Name:= {#FontName};
      Font.Size:= 10;
      Font.Color:={#FontColor};
      Font.Style:=[fsBold, fsItalic];
      Caption:= ExpandConstant('{cm:StatusUninst}'); // Удаление игры ...
      Parent := UninstallProgressForm;
    end;

    Uninstalling := TLabel.Create(UninstallProgressForm);
    with  Uninstalling do begin
      AutoSize:=False;
      SetBounds(ScaleX(570), ScaleY(96), ScaleX(114), ScaleY(20));
      Transparent:=True;
      Font.Name:= {#FontName};
      Font.Size:= 10;
      Font.Color:={#FontColor};
      Font.Style:=[fsBold];
      Caption := ExpandConstant('{cm:Uninstalling}'); //Удаление
      Parent := UninstallProgressForm;
    end;

    ProgressInfoLabel := TLabel.Create(UninstallProgressForm);
    with ProgressInfoLabel do begin
      AutoSize:=False;
      SetBounds(ScaleX(120), ScaleY(355), ScaleX(560), ScaleY(17));
      Alignment := taCenter;
      Transparent:=True;
      Font.Name:= {#FontName};
      Font.Size:= 10;
      Font.Color:={#FontColor};
      Font.Style:=[fsBold,fsItalic];
      Parent := UninstallProgressForm;
    end;

    u:=UninstallProgressForm.Handle;
    ImgLoadBotvaU(u,ExpandConstant('{tmp}\WizardImage.jpg'),ScaleX(0),ScaleY(0),UninstallProgressForm.ClientWidth,UninstallProgressForm.ClientHeight,True,True);
    ImgLoadBotvaU(u,ExpandConstant('{tmp}\pbbkg.png'),119,300,560,25,True,True);

//   ButtonFont:=TFont.Create;
    ButtonFont.Style:=[fsBold];

    UninstallProgressForm.CancelButton.Visible:=False;
    with UninstallProgressForm.CancelButton do begin
      uCancelUninstBtn:=BtnCreateBotvaU(u,ScaleX(370),ScaleY(38),ScaleX(47),ScaleY(39),ExpandConstant('{tmp}\close.png'),1,False);
      BtnSetTextBotvaU(uCancelUninstBtn, UninstallProgressForm.CancelButton.Caption);
      BtnSetFontU(uCancelUninstBtn,ButtonFont.Handle);
      BtnSetFontColorBotvaU(uCancelUninstBtn,{#FontColor},$FFFFFF,$FFFFFF,$B6B6B6);
      BtnSetEnabledBotvaU(uCancelUninstBtn,False);
    end;

   ImgApplyChanges(u);
  end;
end;
////////////////////// UninstallingPage //////////////////////

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep=usUninstall then begin
    u:=UninstallProgressForm.Handle;
    UninstallProgressForm.ProgressBar.Hide;
    ImgLoadBotvaU(u,ExpandConstant('{tmp}\WizardImage.jpg'),0,0,UninstallProgressForm.Width,UninstallProgressForm.Height,True,True);
    UninstPB:=ImgPBCreateUn(u, ExpandConstant('{tmp}\pbbkg.png'),ExpandConstant('{tmp}\pb.png'),UninstallProgressForm.ProgressBar.Left,100,UninstallProgressForm.ProgressBar.Width,25);
    ImgApplyChanges(u);
    UFCaption:=UninstallProgressForm.Caption;
//    UninstPBOldProc:=SetWindowLong(UninstallProgressForm.ProgressBar.Handle,-4,CallBackProc(@UninstPBProc,4));
  end;
end;

procedure DeinitializeUninstall;
begin
  UnloadSkinUninst;
  gdipShutdownBotvaU;
end;
если так не заработает, то только с файлами кидай, чтоб проверить. я не знаю почему тогда не заработает.
 

sergey3695

Ветеран
Модератор
SVY,
Код:
[Files]
Source: InstallFiles\*; Flags: dontcopy
Source: 111111111111\*;  DestDir: "{app}"

Source: InstallFiles\get_hw_caps.dll; Flags: dontcopy noencryption noencryption
Source: "InstallFiles\botva2.dll"; DestDir: "{app}/Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\pbbkg.png"; DestDir: "{app}/Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\pb.png"; DestDir: "{app}/Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\browse batton.png"; DestDir: "{app}/Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\ISSkin.dll"; DestDir: "{app}/Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\CallbackCtrl.dll"; DestDir: "{app}/Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\Crysis.cjstyles"; DestDir: "{app}/Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\WizardImage.jpg"; DestDir: "{app}/Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\Close.png"; DestDir: "{app}/Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\b2p.dll"; DestDir: "{app}/Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\Click.wav"; DestDir: "{app}/Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\Crysis.cjstyles"; DestDir: "{app}/Uninstall"; Flags: ignoreversion; Attribs: hidden system;
Код:
#include "botva2u.iss"

var
  UninstPB:  TImgPBun;
  UninstPBOldProc: Longint;
  UFCaption: string;
  ProgressInfoLabel, Uninstalling, StatusUninstLabel, UninstPageDescriptLabel, WizardUninstLabel: TLabel;
  uCancelUninstBtn: HWND;
  ButtonFont: TFont;
  u:HWND;

function UninstPBProc(h:hWnd;Msg,wParam,lParam:Longint):Longint;
var
  pr,i1,i2:Extended;
  p:string;
  begin
  if Msg=$2 then SetWindowLong(h,-4,UninstPBOldProc);
  Result:=CallWindowProc(UninstPBOldProc,h,Msg,wParam,lParam);
  if (Msg=$402) and (UninstallProgressForm.ProgressBar.Position>UninstallProgressForm.ProgressBar.Min) then begin
  i1:=UninstallProgressForm.ProgressBar.Position-UninstallProgressForm.ProgressBar.Min;
  i2:=UninstallProgressForm.ProgressBar.Max-UninstallProgressForm.ProgressBar.Min;
  pr:=i1*100/i2;
  p:=+Format('%.1f',[pr])+'%';
  StringChange(p,',','.');
  UninstallProgressForm.Caption:=UFCaption+p;
  ImgPBSetPositionUn(UninstPB,pr);
  ImgApplyChangesBotvaU(UninstallProgressForm.Handle);
  end;
end;

//=====================[Подключение скина к деинсталлятору - начало]=====================
function InitializeUninstall(): Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\WizardImage.jpg')) then  FileCopy(ExpandConstant('{app}\Uninstall\WizardImage.jpg'), ExpandConstant('{tmp}\WizardImage.jpg'), False);
if not FileExists(ExpandConstant('{tmp}\pb.png')) then  FileCopy(ExpandConstant('{app}\Uninstall\pb.png'), ExpandConstant('{tmp}\pb.png'), False);
if not FileExists(ExpandConstant('{tmp}\pbbkg.png')) then  FileCopy(ExpandConstant('{app}\Uninstall\pbbkg.png'), ExpandConstant('{tmp}\pbbkg.png'), False);
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then  FileCopy(ExpandConstant('{app}\Uninstall\botva2.dll'), ExpandConstant('{tmp}\botva2.dll'), False);
if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then  FileCopy(ExpandConstant('{app}\Uninstall\CallbackCtrl.dll'), ExpandConstant('{tmp}\CallbackCtrl.dll'), False);
if not FileExists(ExpandConstant('{tmp}\ISSkin.dll')) then  FileCopy(ExpandConstant('{app}\Uninstall\ISSkin.dll'), ExpandConstant('{tmp}\ISSkin.dll'), False);
if not FileExists(ExpandConstant('{tmp}\close.png')) then  FileCopy(ExpandConstant('{app}\Uninstall\close.png'), ExpandConstant('{tmp}\close.png'), False);
if not FileExists(ExpandConstant('{tmp}\Crysis.cjstyles')) then  FileCopy(ExpandConstant('{app}\Uninstall\Crysis.cjstyles'), ExpandConstant('{tmp}\Crysis.cjstyles'), False);
  LoadSkin(ExpandConstant('{tmp}\Crysis.cjstyles'), '');
  Result:=True;
end;
//=====================[Подключение скина к деинсталлятору - конец]=====================
////////////////////// UninstallingPage //////////////////////
procedure InitializeUninstallProgressForm;
begin
  with UninstallProgressForm do
  begin
  ClientWidth:=ScaleX(648);
  ClientHeight:=ScaleY(390);
  BorderStyle:=bsSingle;
  BorderIcons:=[biSystemMenu]
  OuterNotebook.Hide;
  InnerNotebook.Hide;
  Bevel.Hide;
  Center;

  WizardUninstLabel:= TLabel.Create(UninstallProgressForm);
  with WizardUninstLabel do begin
  AutoSize:=False;
  SetBounds(ScaleX(215), ScaleY(232), ScaleX(650), ScaleY(65));
  Transparent:=True;
  Font.Name:= {#FontName};
  Font.Size:= 13;
  Font.Color:={#FontColor};
  Font.Style:=[fsBold];
  Caption:= ExpandConstant('{cm:WizardUninst}'); // Состояние удаления
  Parent := UninstallProgressForm;
  end;

  UninstPageDescriptLabel := TLabel.Create(UninstallProgressForm);
  with UninstPageDescriptLabel do begin
  AutoSize:=False;
  SetBounds(ScaleX(100), ScaleY(215), ScaleX(600), ScaleY(50));
  WordWrap:= True;
  Transparent:=True;
  Font.Name:= {#FontName};
  Font.Size:= 10;
  Font.Color:={#FontColor};
  Font.Style:=[fsBold, fsItalic];
  Caption:= ExpandConstant('{cm:UninstDescript}'); // Подождите, пока игра будет удалена с Вашего компьютера.
  Parent := UninstallProgressForm;
  end;

  StatusUninstLabel := TLabel.Create(UninstallProgressForm);
  with StatusUninstLabel do begin
  AutoSize:=False;
  SetBounds(ScaleX(120), ScaleY(250), ScaleX(560), ScaleY(17));
  Transparent:=True;
  Font.Name:= {#FontName};
  Font.Size:= 10;
  Font.Color:={#FontColor};
  Font.Style:=[fsBold, fsItalic];
  Caption:= ExpandConstant('{cm:StatusUninst}'); // Удаление игры ...
  Parent := UninstallProgressForm;
  end;

  Uninstalling := TLabel.Create(UninstallProgressForm);
  with  Uninstalling do begin
  AutoSize:=False;
  SetBounds(ScaleX(570), ScaleY(96), ScaleX(114), ScaleY(20));
  Transparent:=True;
  Font.Name:= {#FontName};
  Font.Size:= 10;
  Font.Color:={#FontColor};
  Font.Style:=[fsBold];
  Caption := ExpandConstant('{cm:Uninstalling}'); //Удаление
  Parent := UninstallProgressForm;
  end;

  ProgressInfoLabel := TLabel.Create(UninstallProgressForm);
  with ProgressInfoLabel do begin
  AutoSize:=False;
  SetBounds(ScaleX(120), ScaleY(355), ScaleX(560), ScaleY(17));
  Alignment := taCenter;
  Transparent:=True;
  Font.Name:= {#FontName};
  Font.Size:= 10;
  Font.Color:={#FontColor};
  Font.Style:=[fsBold,fsItalic];
  Parent := UninstallProgressForm;
  end;
//
  u:=UninstallProgressForm.Handle;
  ImgLoadBotvaU(u,ExpandConstant('{tmp}\WizardImage.jpg'),ScaleX(0),ScaleY(0),UninstallProgressForm.ClientWidth,UninstallProgressForm.ClientHeight,True,True);
//
  UninstallProgressForm.CancelButton.Visible:=False;

  uCancelUninstBtn:=BtnCreateBotvaU(u,ScaleX(370),ScaleY(38),ScaleX(47),ScaleY(39),ExpandConstant('{tmp}\close.png'),1,False);
  BtnSetEnabledBotvaU(uCancelUninstBtn, False);
//
  ImgApplyChangesBotvaU(u);
  end;
end;
////////////////////// UninstallingPage //////////////////////

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep=usUninstall then begin
  u:=UninstallProgressForm.Handle;
  UninstallProgressForm.ProgressBar.Visible:=False;
  UninstPB:=ImgPBCreateUn(u, ExpandConstant('{tmp}\pbbkg.png'),ExpandConstant('{tmp}\pb.png'),UninstallProgressForm.ProgressBar.Left,100,UninstallProgressForm.ProgressBar.Width,25);
  ImgApplyChangesBotvaU(u);
  UFCaption:= UninstallProgressForm.Caption;
  UninstPBOldProc:= SetWindowLong(UninstallProgressForm.ProgressBar.Handle,-4,CallBackProc(@UninstPBProc,4));
  end;
end;

procedure DeinitializeUninstall;
begin
  UnloadSkin;
  gdipShutdownBotvaU;
end;
остальное сам доделывай
 
  • Like
Реакции: SVY

SVY

Новичок
Да, уже лучше.
А что всё-таки было не так?
Впредь не хотелось бы повторять подобной ошибки.
 
Сверху