Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для nik1967

Старожил


Сообщения: 440
Благодарности: 251

Профиль | Сайт | Отправить PM | Цитировать


Цитата Neutron:
Можно ли сделать так, что бы если например какая программа или игра установлена, и при запуске инсталлятора были 3 кнопки Запустить Удалить Отмена? »
Набросал на скорую руку
Код: Выделить весь код
#define Name "My Program"

[Setup]
AppName={#Name}
AppVerName={#Name}
DefaultDirName={pf}\{#Name}

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Messages]
rus.SetupWindowTitle={#Name}

[Files]
;Source: My Program.exe; DestDir: {app}; Flags: ignoreversion nocompression;

[Registry]
Root: HKLM; Subkey: "SOFTWARE\{#Name}"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\{#Name}"; ValueName: "Path"; ValueType: String; ValueData: "{app}\"; Flags: uninsdeletekey

[UninstallDelete]
Type: filesandordirs; Name: {app};

[_Code]
var
  AppDir, unins, run: string;
  ResultCode: Integer;
  UninsButton, RunButton: TButton;
  MyLabel: TLabel;

procedure ReadEntries;
begin
	RegQueryStringValue(HKLM, 'SOFTWARE\{#Name}', 'Path', AppDir);
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm:= False;
end;

procedure Uninstall(Sender: TObject);
begin
  unins:='unins000.exe';
  ReadEntries;
  if not (FileExists(AddBackslash(AppDir) + unins)) then
    MsgBox('Невозможно запустить деинсталляцию программы ' + ExpandConstant('{#Name}') + ', т.к. исполняемый файл деинсталляции unins000.exe не найден.', mbCriticalError, MB_OK or MB_DEFBUTTON1)
  else
    Exec(AddBackslash(AppDir) + unins, '', ExtractFilePath(AddBackslash(AppDir) + unins), SW_SHOW, ewNoWait, ResultCode);
  WizardForm.Close;
end;

procedure RunProgramm(Sender: TObject);
begin
  run:='My Program.exe';
  ReadEntries;
  if (FileExists(AddBackslash(AppDir) + run)) then
    Exec(AddBackslash(AppDir) + run, '', ExtractFilePath(AddBackslash(AppDir) + run), SW_SHOW, ewNoWait, ResultCode);
  WizardForm.Close;
end;

procedure NewForm;
begin
  ReadEntries;
  if (RegValueExists(HKLM, 'SOFTWARE\{#Name}', 'Path')) and (FileExists(ExpandConstant(AppDir)+'\My Program.exe')) then begin
  with WizardForm do
  begin
    ClientWidth := ScaleX(395);
    ClientHeight := ScaleY(120);
    Bevel.Hide;
    InnerNotebook.Hide;
    OuterNotebook.Hide;
    BorderStyle:= bsDialog;
    Center;
    with CancelButton do
    begin
      Left := WizardForm.CancelButton.Left -100;
      Top := WizardForm.ClientHeight - CancelButton.Height - ScaleY(10);
      BringToFront;
    end;
    UninsButton:= TButton.Create(WizardForm);
    with UninsButton do
    begin
      Left := WizardForm.NextButton.Left -100;
      Top := WizardForm.ClientHeight - NextButton.Height - ScaleY(10);
      Width:= WizardForm.NextButton.Width;
      Parent:= WizardForm;
      Caption:= 'Удалить';
      OnClick := @Uninstall;
      BringToFront;
    end;
    RunButton:= TButton.Create(WizardForm);
    with RunButton do
    begin
      Left := WizardForm.BackButton.Left -110;
      Top := WizardForm.ClientHeight - BackButton.Height - ScaleY(10);
      Width:= WizardForm.BackButton.Width;
      Parent:= WizardForm;
      Caption:= 'Запустить';
      OnClick := @RunProgramm;
      BringToFront;
    end;
    MyLabel:= TLabel.Create(WizardForm);
    with MyLabel do
    begin
      SetBounds(10,10,380,80);
      AutoSize:=False;
      WordWrap:=True;
      Font.Color:=$000000;
      Font.Style:=[fsBold];
      Font.Size:=10;
      Parent:=WizardForm;
      Transparent:=True;
      Caption:= 'Программа ' + ExpandConstant('{#Name}') + ' уже установлена на Ваш компьютер.' +#13#13+ 'Выберите нужное действие.';
      end;
    end;
  end;
end;

procedure InitializeWizard;
begin
  NewForm;
end;

Последний раз редактировалось nik1967, 05-02-2011 в 23:48.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:30, 05-02-2011 | #727