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

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 6]

Аватара для El Sanchez

Ветеран


Contributor


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


Конфигурация

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


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

Новый участник


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

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


nik1967, ну хоть что-то, спасибо.

Отправлено: 12:19, 30-07-2013 | #931



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


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

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


nik1967, а м
Цитата nik1967:
mat_y@vk, пишет, что пытаетесь применить константу "app" прежде, чем она была инициализирована. По русски - пытаешься применить константу "app" до того, как инсталлятор её получит. Это делается на SelectDirPage в function NextButtonClick(CurPageID: Integer): Boolean; »
А можно это показать как пишется правильно?

Я вот что-то не пойму... в какое место в таком виде это надо вставить

читать дальше »
Код: Выделить весь код
///////////////////////////////////////Изоображения///////////////////////////////////////////////
procedure InitializeWizard1();
begin
ExtractTemporaryFile('{#FinishImage}');

WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\{#FinishImage}'));

WelcomeLabel:= TLabel.Create(WizardForm);
WelcomeLabel.AutoSize:= False;
with WizardForm.WelcomeLabel2 do
WelcomeLabel.SetBounds(Left-70, Top-30, Width, Height);
WelcomeLabel.Alignment := taCenter;
WelcomeLabel.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel.Font.Color:= clWhite;
WelcomeLabel.Font.Size:=12
WelcomeLabel.Transparent:= True;
WelcomeLabel.WordWrap:= true;
WelcomeLabel.Caption:= ExpandConstant('{cm:WelcomeLabel}');
WelcomeLabel.Parent:= WizardForm.WelcomePage
WelcomeLabel.Font.Style:=[fsBold];

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
FinishedLabel.SetBounds(Left-70, Top+70, Width, Height);
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Caption:=ExpandConstant('{cm:FinishLabel}');
FinishedLabel.Parent:= WizardForm.FinishedPage
FinishedLabel.Font.Style:=[fsBold];
FinishedLabel.Alignment := taCenter;
FinishedLabel.Font.Size:=10;

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
end;

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

procedure InitializeWizard2();
begin
WizardForm.MainPanel.Height:=150;
WizardForm.WizardSmallBitmapImage.SetBounds(ScaleX(0), ScaleY(0), WizardForm.MainPanel.Width, WizardForm.MainPanel.Height);

PageNameLabel:= TLabel.Create(WizardForm)
with WizardForm.PageNameLabel do
PageNameLabel.SetBounds(Left, Top+50, Width, Height);
PageNameLabel.Transparent:= True;
PageNameLabel.Font:= WizardForm.PageNameLabel.Font;
PageNameLabel.Font.Color:= clWhite;  //цвет надписи
PageNameLabel.Parent:= WizardForm.MainPanel;

WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;

///////////////////////////////////////Изоображения///////////////////////////////////////////////

WizardForm.ComponentsList.Color:=WizardForm.SelectDirPage.Color
WizardForm.BackButton.Left:=0;
WizardForm.NextButton.Left:=WizardForm.CancelButton.Left+10;
WizardForm.NextButton.Top:=WizardForm.Bevel.Top+5;
WizardForm.NextButton.Height:=40;
WizardForm.BackButton.Top:=WizardForm.Bevel.Top+5;
WizardForm.BackButton.Height:=40;
WizardForm.SelectDirBrowseLabel.Hide;
WizardForm.CancelButton.Height:=40;
WizardForm.CancelButton.Top:=WizardForm.Bevel.Top+5;
WizardForm.CancelButton.Left:=WizardForm.CancelButton.Left+10;
WizardForm.CancelButton.Hide;
WizardForm.SelectDirBitmapImage.Hide
WizardForm.SelectGroupBitmapImage.Hide
WizardForm.SelectDirLabel.Left:=WizardForm.SelectDirBitmapImage.Left
WizardForm.SelectDirLabel.Top:=100
WizardForm.DirEdit.Top:=140
WizardForm.DirBrowseButton.Top:=140
WizardForm.GroupEdit.Top:=140
WizardForm.GroupBrowseButton.Top:=140
WizardForm.SelectComponentsLabel.Hide;
WizardForm.ComponentsDiskSpaceLabel.Hide;
WizardForm.SelectStartMenuFolderBrowseLabel.Hide;
WizardForm.SelectStartMenuFolderLabel.Left:=WizardForm.SelectDirBitmapImage.Left;
WizardForm.SelectStartMenuFolderLabel.Top:=100;
WizardForm.SelectTasksLabel.Hide;
WizardForm.ComponentsList.Top:=100;
WizardForm.ComponentsList.Height:=120;
WizardForm.TasksList.Top:=100;
WizardForm.TasksList.Height:=120;
WizardForm.LicenseMemo.Height:=110;
WizardForm.LicenseMemo.Top:=85;
WizardForm.StatusLabel.Top:=100;
end;

///////////////////////////////////////ISDone////////////////////////
procedure CancelButtonOnClick(Sender: TObject);
begin
  SuspendProc;
  if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
  ResumeProc;
end;

procedure HideControls;
begin
  WizardForm.FileNamelabel.Hide;
  ISDoneProgressBar1.Hide;
  LabelPct1.Hide;
  LabelTime1.Hide;
  LabelTime2.Hide;
  MyCancelButton.Hide;
end;

procedure CreateControls;
var PBTop:integer;
begin
  PBTop:=ScaleY(50);
  ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar1 do begin
    Parent   := WizardForm;
    Height   := WizardForm.CancelButton.Height-10
    Left     := ScaleX(0);
    Top      := WizardForm.BackButton.Top+5;
    Width    := ScaleX(405);
    Max      := 1000;
  end;
  LabelPct1 := TLabel.Create(WizardForm);
  with LabelPct1 do begin
    Parent    := ISDoneProgressBar1;
    AutoSize  := True;
    Left      := 10;
    Top       := 3;
    Font.Size := 14;
    Width     := ScaleX(80);
    Transparent:=True;
  end;
  LabelTime1 := TLabel.Create(WizardForm);
  with LabelTime1 do begin
    Parent   := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width div 2;
    Left     := ScaleX(0);
    Top      := 200;
  end;
  LabelTime2 := TLabel.Create(WizardForm);
  with LabelTime2 do begin
    Parent   := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := LabelTime1.Width+ScaleX(40);
    Left     := ISDoneProgressBar1.Width div 2;
    Top      := LabelTime1.Top;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
    FindHandle1,ColFiles1,CurIndex1,tmp:integer;
    ExecError:boolean;
    InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
  if CurStep = ssInstall then begin  //Если необходимо, можно поменять на ssPostInstall
    WizardForm.ProgressGauge.Height:=30;
    WizardForm.ProgressGauge.Top:=150;
    WizardForm.CancelButton.Hide;
    CreateControls;
    WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
    ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.


    ISDoneError:=true;
   
    HideControls;
    WizardForm.CancelButton.Visible:=true;
    WizardForm.CancelButton.Enabled:=false;
//    BtnPanel.Show;
  end;
  if (CurStep=ssPostInstall) and ISDoneError then begin
    Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;
end;
/////////////////////////////////////////////ISDone/////////////////////







procedure InitializeWizard();
begin
    MyCancelButton:=TNewButton.Create(WizardForm);
    with MyCancelButton do begin
    Parent:=WizardForm;
    Width:=WizardForm.CancelButton.Width;
    Caption:='Отмена';
    Left:=WizardForm.CancelButton.Left+10;
    Height:=40;
    Top:=WizardForm.Bevel.Top+5;
    OnClick:=@CancelButtonOnClick;
  // Необходимо добавлять каждую кнопку расположенную на стекле
  // до инициализации стекла для того что бы не было дыр ))
  iswin7_add_button(WizardForm.BackButton.Handle);
  iswin7_add_button(WizardForm.NextButton.Handle);
  iswin7_add_button(WizardForm.CancelButton.Handle);
  iswin7_add_button(MyCancelButton.Handle);
  // Параметр True не трогать он для htuos ))
  iswin7_add_glass(WizardForm.Handle, 0, 0, 0, 47, True);
end;
  InitializeWizard1();
  InitializeWizard2();

  #ifdef ComponentsInfo
  InitializeWizard4();
  #endif
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
#ifdef CancelOnWelcome
 if CurPageID = wpWelcome then
 begin
  WizardForm.CancelButton.Left:=0;
end;
 if CurPageID = wpsELECTdIR then
 begin
  WizardForm.CancelButton.Left:=WizardForm.NextButton.Left;
 end;
#endif
 if CurPageID = wpSelectTasks then
 begin
  WizardForm.NextButton.Caption:='Установить';
end;
// if CurPageID = wpInstalling then
// begin
//  BtnPanel.Hide;
//end;
  MyCancelButton.Hide;
if CurPageID = wpInstalling then
 begin
  MyCancelButton.Show;
end;

Последний раз редактировалось mat_y@vk, 30-07-2013 в 12:55.


Отправлено: 12:40, 30-07-2013 | #932


Ветеран


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

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


mat_y@vk
Код: Выделить весь код
function NextButtonClick(CurPageID: Integer): Boolean;
begin
    Result := True;

    case CurPageID of
        wpSelectDir:
        begin
            Result := FileExists(ExpandConstant('{app}\res\resources.xml');
            if not Result then MsgBoxEx(WizardForm.Handle, 'Ошибка! Приложение' + #32 + ExpandConstant('{#SetupSetting("AppName")}') + #32 + 'не найдено на данном компьютере', 'Ошибка', MB_OK or MB_ICONWARNING, 0, 0);
        end;
    end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:59, 30-07-2013 | #933


Новый участник


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

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


Классный форум
Как форсировать создание иконки на рабочем столе и пропустить страницу дополнительных задач?

[Tasks] У меня пустой.


Код: Выделить весь код
[Icons]
Name: "{commondesktop}\program"; Filename: "{app}\myapp.exe";
И второе: Можно ли добавить на страницу выбора директории отображение свободного места?

Отправлено: 14:09, 30-07-2013 | #934


Новый участник


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

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


Цитата alex barmalei:
Как форсировать создание иконки на рабочем столе и пропустить страницу дополнительных задач? »
Код: Выделить весь код
Name: {userdesktop}\Имя иконки; IconFilename: {app}\ProgName.exe; Filename: {app}\ProgName.exe; Flags: createonlyiffileexists; Check: CheckError
saurn, низкий поклон Вам. Работает!

Отправлено: 14:19, 30-07-2013 | #935


Новый участник


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

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


mat_y@vk, я наврал, Tasks не был пустой и в нем было прописано создание иконки.
Все работает.

Отправлено: 14:32, 30-07-2013 | #936


Новый участник


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

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


----------------------------
Одной проблемой меньше, но появился новый вопрос:

Я нашел ключ на Unninstal к установленной игре в реестре, вот он:

AppId={{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}

На всех моих компах (везде Вин 7 х32 и х64) по этому AppId установщик находит верный путь... но некоторые люди жалуются, что он сам не находит путь... есть ли способ еще как-то искать путь к программе установленной уже? Может по имени exe'шника или еще чего в реестре поискать? Или скрипт какой...

Отправлено: 14:40, 30-07-2013 | #937


Забанен


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

Профиль | Цитировать


Цитата mat_y@vk:
есть ли способ еще как-то искать путь к программе установленной уже? »
например в секцию [Setup]

Через информацию деинсталляции
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("Введите_сюда_AppID")}_is1,InstallLocation|{pf}\My Program}

Только учтите, Inno создаёт AppId такого рода {AppId}_is1, так же может быть название приложения вместо AppId, другие программы могут создавать так {AppId}, а могут без AppId, вместо него название приложения.

И одного AppId мало, в информации деинсталляции например может быть прописан и путь к приложению, например InstallLocation. Если же имеется вообще, поскольку может быть и не прописан.




Через информацию установленного приложения, например по \SOFTWARE\Ваша_программа

это общая
Код: Выделить весь код
HKLM\SOFTWARE\Ваша_программа 
это пользовательская
Код: Выделить весь код
HKCU\SOFTWARE\Ваша_программа
читать дальше »
Код: Выделить весь код
AppName=My Program
AppVersion=1.5
DefaultDirName={reg:HKLM\SOFTWARE\KLCodecPack,installdir|{pf}\My Program}

Последний раз редактировалось Noname22, 30-07-2013 в 16:26.

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

Отправлено: 15:28, 30-07-2013 | #938


Аватара для Johny777

Ветеран


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

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


mat_y@vk, Немного теории. Установка как таковая состоит из 2 действий:
1. Копирование чего надо куда надо
2. Создание ключа в реестре и внос туда стандартных подключей. Нпример раздел HKEY_CURRENT_USER,
ключ 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Твой_апп_айди';

Имена подключей неизменяемы и заложены майкрософтом. Вот тут стандартные имена, но не все http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx Нет например DisplayIcon
По этим значениям этих подключей заполняется инфа в списке "программы и компонеты". Как минимум нужны UninstallString и DisplayName чтоб твоя программа появилась в списке.

Для удаления программы достаточно удалить ключ 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Твой_апп_айди';

Ты наверное уже понял что единственный путь к экзешнику, который всегда лежит в реестре = путь к программе удаления.
Да ты можешь внести другие ключи со своими значениями, но это зависит от автора инсталла и полагаться на это нельзя.
Искать по DisplayName тоже не получится. Кто-то может назвать игру "Super World of Tanks". Да здесь мы видим ещё и "World of Tanks" в названии. А что если она будет называться так "WoTv1.1.0"? Короче тоже не вариант
Искать экзешник на компе не проблема - так ты найдёшь путь. Только вот искать придётся по всему компу а это может быть очень долго, ведь нельзя полагаться что игра стоит в Program Files

Вывод если у пользователя стоит не твоя версия игры или не официальная, короче не апп ай-ди из твоего поста то пусть он сам укажет путь, а если твой апп ай-ди, то никаких проблем
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:42, 30-07-2013 | #939


Новый участник


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

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


Johny777, Noname22, ясно.
А этот AppId не зависит от установленной винды? Ну типа на ХР он отличается от AppId на Вин7 или 8.

У меня еще вопрос... как можно добавить свои кнопки на 1 страницу со ссылкой в сеть... обязательно botva.dll? Или есть более простой способ?

У меня просто тут засада какая-то... ни один фаил справки не открывается... точнее открывается, а текста нет... уже все решения сайта MS попробовал... ничего (Win 7 x86 ultra)

Отправлено: 15:58, 30-07-2013 | #940



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59




 
Переход